MariaDB ROUND() vs TRUNCATE()

发布于

MariaDB 有一个函数和一个函数,可以根据其参数的确切值返回相同的结果或不同的结果。ROUND()TRUNCATE()

正如函数名称所暗示的那样,_对数字进行舍入_并_截断_数字。截断数字只是将其切断,而不执行任何舍入。ROUND()``TRUNCATE()

以下是MariaDB之间和之间的区别的简要介绍。ROUND()``TRUNCATE()

区别

简而言之,以下是每个函数之间的区别:

  • ROUND() _将其参数舍入_到指定的小数位数。这有时会导致结果四舍五入,有时则不然。
  • TRUNCATE()只需将其参数_截断_为指定的小数位数。不发生舍入。

语法和定义

首先,以下是每个函数的语法和定义。

ROUND()

该函数可以通过以下两种方式使用:ROUND()

ROUND(X)
ROUND(X,D)

ROUND()将参数舍入到小数位。舍入算法取决于 的数据类型。X``D``X

TRUNCATE()

该函数只能使用一种语法:TRUNCATE()

TRUNCATE(X,D)

TRUNCATE()返回截断到小数位的数字。X``D

示例

下面是一个比较,以演示 和 之间的区别:ROUND()``TRUNCATE()

SELECT 
    TRUNCATE(3.6789, 2),
    ROUND(3.6789, 2);

输出:

+---------------------+------------------+
| TRUNCATE(3.6789, 2) | ROUND(3.6789, 2) |
+---------------------+------------------+
|                3.67 |             3.68 |
+---------------------+------------------+

在本例中,该函数将数字向上舍入,因为下一个数字 () 大于 。ROUND()``8``5

另一方面,该函数只是截断了指定小数位的数字。 不进行任何舍入。它只是切断指定位置的数字。TRUNCATE()``TRUNCATE()

这两个函数都接受小数位的负值,并且相同的相应逻辑适用:

SELECT 
    TRUNCATE(36789, -2),
    ROUND(36789, -2);

输出:

+---------------------+------------------+
| TRUNCATE(36789, -2) | ROUND(36789, -2) |
+---------------------+------------------+
|               36700 |            36800 |
+---------------------+------------------+

相同的结果

这两个函数有时可以返回相同的结果。这完全取决于传递的参数的值。

下面是它们都返回相同结果的示例:

SELECT 
    TRUNCATE(3.6749, 2),
    ROUND(3.6749, 2);

输出:

+---------------------+------------------+
| TRUNCATE(3.6749, 2) | ROUND(3.6749, 2) |
+---------------------+------------------+
|                3.67 |             3.67 |
+---------------------+------------------+

在本例中,没有向上舍入数字,因为下一个数字 () 小于 。因此,两个结果是相同的。ROUND()``4``5

函数FLOOR()

这两个函数都与函数不同,函数返回的最大整数值不大于其参数。 不接受第二个参数,例如 and do(无论如何它只返回一个整数)。FLOOR()FLOOR()``ROUND()``TRUNCATE()