格式和舍入 MySQL 的区别

6

我想知道 round((first + second + third + fourth)/4,2) 和 format((first + second + third + fourth)/4,2) 之间是否有区别。

我在我的数据库中尝试了一下,但是没有看到区别。我正在处理一个需要精确的项目。

谢谢您提前的帮助。

2个回答

6

将参数X四舍五入到D位小数。取决于X的数据类型,舍入算法也会有所不同。如果未指定D,则默认为0。D可以是负数,以使值X的小数点左侧的D个数字变为零。

-->ROUND(X,D)

将数字X格式化为类似于“#,###,###.##”的格式,四舍五入到D位小数,并将结果作为字符串返回。 如果D为0,则结果没有小数点或小数部分。 D应该是一个常量值。

--> FORMAT(X,D)

好久不见了..我刚看到你的帖子,谢谢 :) - makoto
@makoto 需要进行更详细的解释。请看下面我的回答。 - Payel Senapati

1

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                   |
+------------------------------------+

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接