第24章:精度数学 / 24.4. 四舍五入

本节讨论了精度数学的四舍五入特性,ROUND()函数,以及插入DECIMAL列时的四舍五入特性。

ROUND()函数的行为取决于其参量是准确的还是近似的:

·         对于准确值数值,ROUND()采用“半值向上舍入”规则:如果小数部分的值为.5或更大,如果是正数,向上取下一个整数,如果是负数,向下取下一个整数(换句话讲,以0为界限执行舍入)。如果小数部分的值小于.5,如果是正数,向下取下一个整数,如果是负数,向上取下一个整数。

·         对于近似值数值,结果取决于C库函数。在很多系统上,它意味着ROUND()将使用舍入至最近的偶数规则:具有任何小数部分的值均将被舍入为最近的偶数。

在下面的示例中,介绍了舍入操作对准确值和近似值的不同处理方式:

mysql> SELECT ROUND(2.5), ROUND(25E-1);
+------------+--------------+
| ROUND(2.5) | ROUND(25E-1) |
+------------+--------------+
| 3          |            2 |
+------------+--------------+

对于向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: 2

mysql> SELECT d FROM t;
+------+
| d    |
+------+
| 3    |
| 3    |
+------+