我想知道 round((first + second + third + fourth)/4,2) 和 format((first + second + third + fourth)/4,2) 之间是否有区别。
我在我的数据库中尝试了一下,但是没有看到区别。我正在处理一个需要精确的项目。
谢谢您提前的帮助。
将参数X四舍五入到D位小数。取决于X的数据类型,舍入算法也会有所不同。如果未指定D,则默认为0。D可以是负数,以使值X的小数点左侧的D个数字变为零。
-->ROUND(X,D)
将数字X格式化为类似于“#,###,###.##”的格式,四舍五入到D位小数,并将结果作为字符串返回。 如果D为0,则结果没有小数点或小数部分。 D应该是一个常量值。
--> FORMAT(X,D)
MySQL中的ROUND()函数用于将FLOAT数字四舍五入到指定的小数位数。
语法:
ROUND(X, D);
X:我们要四舍五入的数字。
D:我们要将数字四舍五入到的小数位数。它是可选的。它可以是零、正数、负数或不存在。
情况1: D不存在 -
FLOAT数字将被四舍五入为INT数字。如果小数点右侧的数字>= 5,则将1添加到INT数字,否则将保持不变。
SELECT ROUND(45.4);
+-------------+
| ROUND(45.4) |
+-------------+
| 45 |
+-------------+
SELECT ROUND(45.5);
+-------------+
| ROUND(45.5) |
+-------------+
| 46 |
+-------------+
SELECT ROUND(45.6);
+-------------+
| ROUND(45.6) |
+-------------+
| 46 |
+-------------+
情况2: D为零 -
结果与情况1相同
SELECT ROUND(45.4, 0);
+----------------+
| ROUND(45.4, 0) |
+----------------+
| 45 |
+----------------+
SELECT ROUND(45.5, 0);
+----------------+
| ROUND(45.5, 0) |
+----------------+
| 46 |
+----------------+
SELECT ROUND(45.6, 0);
+----------------+
| ROUND(45.6, 0) |
+----------------+
| 46 |
+----------------+
情况3: D为正数 -
浮点数将四舍五入到小数点右侧'D'位数字。如果第'D+1'位的数字<=4,则第'D'位的数字保持不变。如果第'D+1'位的数字>=5,则第'D'位的数字增加1。
SELECT ROUND(45.44, 1);
+-----------------+
| ROUND(45.44, 1) |
+-----------------+
| 45.4 |
+-----------------+
SELECT ROUND(45.45, 1);
+-----------------+
| ROUND(45.45, 1) |
+-----------------+
| 45.5 |
+-----------------+
SELECT ROUND(45.46, 1);
+-----------------+
| ROUND(45.46, 1) |
+-----------------+
| 45.5 |
+-----------------+
情况4: D为负数 -
浮点数将四舍五入到小数点左侧的'D'位数字。如果在'D'处的数字小于或等于4,则保持'D-1'处的数字不变。如果在'D'处的数字大于或等于5,则将'D-1'处的数字增加1。
SELECT ROUND(44.4, -1);
+-----------------+
| ROUND(44.4, -1) |
+-----------------+
| 40 |
+-----------------+
SELECT ROUND(45.4, -1);
+-----------------+
| ROUND(45.4, -1) |
+-----------------+
| 50 |
SELECT ROUND(46.4, -1);
+-----------------+
| ROUND(46.4, -1) |
+-----------------+
| 50 |
+-----------------+
MySQL中的FORMAT()函数用于将数字格式化为“#,###.##”格式,四舍五入到某个小数位。格式化数字后,它将作为字符串返回。
语法:
FORMAT(N, D, locale);
N:我们要格式化的数字。
D:我们想要将数字舍入到的小数位数。它可以是零或正数。
locale:locale是一个可选参数,用于确定千位分隔符和分组之间的分隔符。默认情况下,MySQL将使用'en_US'区域设置。
对于参数D,ROUND()和FORMAT()函数之间的重要区别是-
与ROUND()函数不同,FORMAT()函数中D是必选项
与ROUND()函数不同,FORMAT()函数中D的负值与零值具有相同的效果。
与ROUND()函数不同,FORMAT()函数中当D的值大于小数点后的数字位数时,会在最后一位数字右侧添加零。
两个函数的其余规则相同
当D大于小数点后的数字位数时 -
SELECT FORMAT(23435.37, 3);
+---------------------+
| FORMAT(23435.37, 3) |
+---------------------+
| 23,435.370 |
+---------------------+
SELECT FORMAT(23435.37, 4);
+---------------------+
| FORMAT(23435.37, 4) |
+---------------------+
| 23,435.3700 |
+---------------------+
当D为零时 -
SELECT FORMAT(23435.37, 0);
+---------------------+
| FORMAT(23435.37, 0) |
+---------------------+
| 23,435 |
+---------------------+
当D为负数时 -
SELECT FORMAT(23435.37, -1);
+----------------------+
| FORMAT(23435.37, -1) |
+----------------------+
| 23,435 |
+----------------------+
当D为正数时 -
SELECT FORMAT(23435.34, 1);
+---------------------+
| FORMAT(23435.34, 1) |
+---------------------+
| 23,435.3 |
+---------------------+
SELECT FORMAT(23435.35, 1);
+---------------------+
| FORMAT(23435.35, 1) |
+---------------------+
| 23,435.4 |
+---------------------+
SELECT FORMAT(23435.36, 1);
+---------------------+
| FORMAT(23435.36, 1) |
+---------------------+
| 23,435.4 |
+---------------------+
locale参数是可选的。如果省略它,则默认格式为'en_US'。
SELECT FORMAT(2894581234.389, 2);
+---------------------------+
| FORMAT(2894581234.389, 2) |
+---------------------------+
| 2,894,581,234.39 |
+---------------------------+
locale参数也可以明确地声明为'en_US'
SELECT FORMAT(2894581234.389, 2, 'en_US');
+------------------------------------+
| FORMAT(2894581234.389, 2, 'en_US') |
+------------------------------------+
| 2,894,581,234.39 |
+------------------------------------+
这里,locale参数被更改为'en_IN'。格式发生了变化。
SELECT FORMAT(2894581234.389, 2, 'en_IN');
+------------------------------------+
| FORMAT(2894581234.389, 2, 'en_IN') |
+------------------------------------+
| 2,89,45,81,234.39 |
+------------------------------------+
这里,locale参数被更改为'de_DE'。再次更改了格式。
SELECT FORMAT(2894581234.389, 2, 'de_DE');
+------------------------------------+
| FORMAT(2894581234.389, 2, 'de_DE') |
+------------------------------------+
| 2.894.581.234,39 |
+------------------------------------+