MySQL 计算某列数据的除数并保留两位小数(MySQL 除法运算保留指定位数的小数)

  MySQL 数据库中,订单表 tbl_test_order01 中有一列 order_at,字段类型是 int(11),表示订单金额。现在需要将 order_at 除以 1000,并保留 2 位小数。实现的 SQL 语句及查询结果如下所示:

mysql> SELECT order_at, CONVERT(order_at/1000, DECIMAL(15,2)) AS order_at1, TRUNCATE(order_at/1000, 2) AS order_at2 FROM tbl_test_order01;
+----------+-----------+-----------+
| order_at | order_at1 | order_at2 |
+----------+-----------+-----------+
|   -12345 |    -12.35 |    -12.34 |
|   158999 |    159.00 |    158.99 |
|      565 |      0.57 |      0.56 |
|      200 |      0.20 |      0.20 |
|      590 |      0.59 |      0.59 |
|      260 |      0.26 |      0.26 |
+----------+-----------+-----------+
6 rows in set (0.00 sec)

  实现方法总结:

1、DECIMAL(P, D)

  MySQL DECIMAL 数据类型用于在数据库中存储精确的数值。我们经常将DECIMAL 数据类型用于保留准确精确度的列。要定义数据类型为 DECIMAL 的列,可以使用以下语法:

column_name  DECIMAL(P,D);

  在上面的语法中:

  • P:表示有效数字位数。P 范围为 1〜65。
  • D:表示小数点后的位数。D 的范围是 0~30。MySQL 要求 D 小于或等于 (<=) P。

  DECIMAL(P,D) 表示数据列可以存储 D 位小数的 P 位数。十进制列的实际范围取决于精度和刻度。例如:DECIMAL(6, 2) 最多可以存储 6 位数字,小数位数为 2 位,因此该列的范围是从 -9999.99 到 9999.99。

  MySQL 允许使用以下语法:

column_name DECIMAL(P);

  这相当于:

column_name DECIMAL(P,0);

  在这种情况下,列不包含小数部分或小数点。

  此外,我们甚至可以使用以下语法。

column_name DECIMAL;

  在这种情况下,P 的默认值为10。

2、CONVERT(order_at/1000, DECIMAL(15,2))

  CONVERT(order_at/1000, DECIMAL(15,2)) 可以将 order_at 除以 1000 的值,保留 2 位小数,结果四舍五入。

3、TRUNCATE(order_at/1000, 2)

  TRUNCATE(order_at/1000, 2) 也可以将 order_at 除以 1000 的值,保留 2 位小数。但是结果截断到 2 个小数位,舍去法,不是四舍五入。

  TRUNCATE(X,D) 是 MySQL 自带的一个系统函数。其中,X 是数值,D 是保留小数的位数。其作用就是按照小数位数,进行数值截取(此处的截取是按保留位数直接进行截取,没有四舍五入)。

  数值保留规则如下:

  • 当 D 大于 0,是对数值 X 的小数位数进行操作;
  • 当 D 等于 0,是将数值 X 的小数部分去除,只保留整数部分;
  • 当 D 小于 0,是将数值 X 的小数部分去除,并将整数部分按照 D 指定位数,用 0 替换。

  函数示例如下:

  • 当 X 为正数时:
SELECT TRUNCATE(123.4567, 3);   # 123.456
SELECT TRUNCATE(123.4567, 2);   # 123.45
SELECT TRUNCATE(123.4567, 1);   # 123.4
SELECT TRUNCATE(123.4567, 0);   # 123
SELECT TRUNCATE(123.4567, -1);  # 120
SELECT TRUNCATE(123.4567, -2);  # 100
SELECT TRUNCATE(123.4567, -3);  # 0
  • 当 X 为负数时:
SELECT TRUNCATE(-123.4567, 3);   # -123.456
SELECT TRUNCATE(-123.4567, 2);   # -123.45
SELECT TRUNCATE(-123.4567, 1);   # -123.4
SELECT TRUNCATE(-123.4567, 0);   # -123
SELECT TRUNCATE(-123.4567, -1);  # -120
SELECT TRUNCATE(-123.4567, -2);  # -100
SELECT TRUNCATE(-123.4567, -3);  # 0
文章参考:
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值