数值函数:round、truncate、mod、format

163 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 9 天,点击查看活动详情

一、前言

大家好,今天文章的内容是:

  • round()
  • truncate()
  • mod()
  • format()

二、内容

round

该函数有两种形式:

  • round(x, n):该函数将参数 x 舍入到 n 位小数。
  • 比如:
    mysql> select round(123.456789, 3);
    +----------------------+
    | round(123.456789, 3) |
    +----------------------+
    |              123.457 |
    +----------------------+
    1 row in set (0.00 sec)
    
  • 如果 n 是负数,则使得 x 小数点左边的 n 位变为零。
  • 比如:
    mysql> select round(11111.999, -1);
    +----------------------+
    | round(11111.999, -1) |
    +----------------------+
    |                11110 |
    +----------------------+
    1 row in set (0.00 sec)
    
    mysql> select round(11111.999, -2);
    +----------------------+
    | round(11111.999, -2) |
    +----------------------+
    |                11100 |
    +----------------------+
    1 row in set (0.00 sec)
    
    mysql> select round(11111.999, -3);
    +----------------------+
    | round(11111.999, -3) |
    +----------------------+
    |                11000 |
    +----------------------+
    1 row in set (0.00 sec)
    
  • round(x):如果没有指定参数 n,那么默认 n00
  • 比如:
    mysql> select round(123.456789);
    +-------------------+
    | round(123.456789) |
    +-------------------+
    |               123 |
    +-------------------+
    1 row in set (0.00 sec)
    

备注:D的最大绝对值为30,任何超过30(或-30)的数字都会被截断。

truncate

  • truncate(x, n):返回数字 xn 位小数
  • 如果 n 为0,则结果没有小数点或小数部分
  • 如果 n 为负数,则值 x 小数点左边的 n 位变为零
  • 如果有任意参数为 NULL,则函数返回NULL

比如:

mysql> select truncate(123.456, 2);
+----------------------+
| truncate(123.456, 2) |
+----------------------+
|               123.45 |
+----------------------+
1 row in set (0.00 sec)

mysql> select truncate(123.456, 0);
+----------------------+
| truncate(123.456, 0) |
+----------------------+
|                  123 |
+----------------------+
1 row in set (0.00 sec)

mysql> select truncate(123.456, -2);
+-----------------------+
| truncate(123.456, -2) |
+-----------------------+
|                   100 |
+-----------------------+
1 row in set (0.00 sec)

truncate()round()的区别是后者有四舍五入。

比如:

mysql> select truncate(1.999, 1);
+--------------------+
| truncate(1.999, 1) |
+--------------------+
|                1.9 |
+--------------------+
1 row in set (0.00 sec)

mysql> select round(1.999, 1);
+-----------------+
| round(1.999, 1) |
+-----------------+
|             2.0 |
+-----------------+
1 row in set (0.00 sec)

mod

  • mod(n, m):求模运算,返回 n 除以 m 的余数。
  • 如果 mnNULL,则返回NULL
mysql> select mod(10, 3);
+------------+
| mod(10, 3) |
+------------+
|          1 |
+------------+
1 row in set (0.00 sec)

当然,在 MySQL 中,还有其他办法可以进行求模运算,如下所示:

mysql> select 10 % 3;
+--------+
| 10 % 3 |
+--------+
|      1 |
+--------+
1 row in set (0.00 sec)

mysql> select 10 mod 3;
+----------+
| 10 mod 3 |
+----------+
|        1 |
+----------+
1 row in set (0.00 sec)

format

  • format(x, D):将数字 X 格式化为 “#,###,###.##”的形式,并四舍五入到 D 位小数,最后将结果以字符串的形式返回。

比如:

mysql> select format(123456.789, 2);
+-----------------------+
| format(123456.789, 2) |
+-----------------------+
| 123,456.79            |
+-----------------------+
1 row in set (0.00 sec)

三、后话

好了,今天的文章内容就到这里,感谢观看。