【问题标题】:Mysql decimal: floor instead of roundMysql十进制:地板而不是圆形
【发布时间】:2013-02-18 20:32:45
【问题描述】:

在我的 MySQL 数据库中,我有字段 DECIMAL(23,5),所以小数点后有 5 位数字。现在,我什么时候会这样查询:

UPDATE my_table SET my_decimal_field = 123.123456789 WHERE id = 1

然后我将获取该记录:

SELECT id, my_decimal_field FROM gijhars WHERE id = 1

我得到这个结果:

+------+------------------+
| id   | my_decimal_field |
+------+------------------+
| 5733 |   123.12346      |
+------+------------------+

当然,如果这些值在小数点后超过 6 位,MySQL 会四舍五入。 MySQL 中是否有任何设置来floor这些值而不是四舍五入?

【问题讨论】:

  • dev.mysql.com/doc/refman/5.6/en/fixed-point-types.html 当为此类列分配的值的小数点后位数超过指定比例允许的位数时,该值将转换为该比例。 (确切的行为是特定于操作系统的,但通常效果是截断到允许的位数。)
  • 是的,我可以,只是好奇是否可以通过配置来完成,因为我在整个应用程序中都需要这种行为。

标签: mysql decimal


【解决方案1】:

来自doc

当为此类列分配的值的小数点后位数超过指定比例允许的位数时,该值将转换为该比例。 (确切的行为是特定于操作系统的,但通常效果是截断到允许的位数。

如果您的操作系统不是这种情况,那么您可以在使用 truncate 更新时处理此问题

UPDATE my_table 
SET my_decimal_field = truncate(123.123456789, 5) 
WHERE id = 1

SQLFiddle demo

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-31
    • 1970-01-01
    • 2020-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多