本节讨论了精度数学的四舍五入特性,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 | +------+