暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL的函数和运算符 - 精确数学 - 舍入行为

林员外聊编程 2021-10-11
616
舍入行为
 
本部分讨论有关 ROUND() 函数的精确数学舍入,以及向具有精确值类型的列(DECIMAL 和整数)插入时的舍入。
 
ROUND() 函数根据它的参数是精确的还是近似的进行不同的舍入:
 
 对于精确值的数字,ROUND() 使用“四舍五入”规则:小数部分大于或等于 .5 的值,如果为正,则向上舍入到下一个整数,如果为负,则舍入到下一个整数。(换句话说,它是远离零舍入的。)小数部分小于 .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> SHOW WARNINGS;
+-------+------+----------------------------------------+
| Level | Code | Message |
+-------+------+----------------------------------------+
| Note | 1265 | Data truncated for column 'd' at row 1 |
| Note | 1265 | Data truncated for column 'd' at row 2 |
+-------+------+----------------------------------------+
2 rows in set (0.00 sec)


mysql> SELECT d FROM t;
+------+
| d |
+------+
| 3 |
| 3 |
+------+
2 rows in set (0.00 sec)
 
SHOW WARNINGS 语句显示由于小数部分舍入而截断生成的注释。这样的截断不是错误,即使在严格的SQL模式中。
 
 
 
官方网址:
https://dev.mysql.com/doc/refman/8.0/en/precision-math-rounding.html
 

文章转载自林员外聊编程,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论