Spec-Zone .ru
спецификации, руководства, описания, API
|
Этот раздел обсуждает математику точности, округляющуюся для ROUND()
функционируйте и для вставок в столбцы с типами точного значения (DECIMAL
и целое число).
ROUND()
функционируйте
округляется по-другому в зависимости от того, точен ли его параметр или приблизителен:
Для чисел точного значения, ROUND()
использует "круглую половину"
правило: значение с дробной частью.5 или больше окружается к следующему целому числу если положительный
или вниз к следующему целому числу если отрицание. (Другими словами это округляется далеко от нуля.)
Значение с дробной частью меньше чем.5 округляются в меньшую сторону до следующего целого числа если
положительный или до следующего целого числа если отрицание.
Для чисел приближенного значения результат зависит от библиотеки C. На многих
системах это означает это ROUND()
использует "вокруг для самого близкого даже" правила: значение с любой
дробной частью округляется к самому близкому даже целое число.
Следующие шоу в качестве примера, как округление отличается для точных и приближенных значений:
mysql> SELECT ROUND(2.5),
ROUND(25E-1);
+------------+--------------+| ROUND(2.5) | ROUND(25E-1) |+------------+--------------+| 3 | 2 |+------------+--------------+
Для вставок в a DECIMAL
или целочисленный столбец, цель является точным типом данных, таким образом округляя использование "круглая половина далеко от нуля," независимо
от того, точно ли значение, которое будет вставлено, или приблизительно:
mysql>CREATE TABLE t (d DECIMAL(10,0));
Query OK, 0 rows affected (0.00 sec)mysql>INSERT INTO t VALUES(2.5),(2.5E0);
Query OK, 2 rows affected, 2 warnings (0.00 sec)Records: 2 Duplicates: 0 Warnings: 2mysql>SELECT d FROM t;
+------+| d |+------+| 3 || 3 |+------+