【问题标题】:mysql decimal roundmysql十进制四舍五入
【发布时间】:2012-11-24 13:26:45
【问题描述】:

我是 mysql 新手,需要一些基本的东西。

我需要像这样四舍五入小数:

21,4758 应该是 21,48

0,2250 应该是 0,22

23,0850 应该是 23,08

22,9950 应该是 22,99

我尝试了很多东西,但没有成功。

谢谢。

【问题讨论】:

    标签: mysql decimal truncate rounding


    【解决方案1】:

    试试这个:

    // round the value to two decimal places 
    SELECT ROUND(<YOUR_FIELD>, 2) field FROM <YOUR_TABLE>
    // use truncate if you don't wan't to round the actual value
    SELECT TRUNCATE(<YOUR_FIELD>, 2) field FROM <YOUR_TABLE>
    // you can also use round or truncate depending whether the third decimal is > 5
    SELECT IF(SUBSTR(<YOUR_FIELD>, 5, 1) > 5, 
       ROUND(<YOUR_FIELD>, 2), 
       TRUNCATE(<YOUR_FIELD>, 2)) field 
    FROM <YOUR_TABLE>;
    

    以上不是一个完整的解决方案,但也许它会为您指明正确的方向。

    阅读mysql round()mysql truncate() 的文档

    【讨论】:

    • 它使 0,2250 变为 0,23。不起作用。 0,2250 应该是 0,22。
    • @Can - 我更新了我的答案,你应该使用truncate 而不是round,尽管你也想对值进行四舍五入。
    • 是的,谢谢 Krister,前三个都有效。但这一次,22,9950 返回 23..
    • @Can - 我不明白为什么不以普通方式将数字四舍五入?
    【解决方案2】:
    DECLARE @old decimal(38, 10)
    DECLARE @p decimal(38, 10)
    SET @p = 21.4758
    
    SET @p = @p * 100
    SET @p = @p - 0.01
    SET @p = ROUND(@p, 0)
    SET @p = @p / 100.0
    SELECT @p
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-07-13
      • 2015-07-30
      • 2020-10-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多