【问题标题】:SQL DECIMAL losing precision when SET with calculation设置计算时 SQL DECIMAL 丢失精度
【发布时间】:2013-12-24 16:23:12
【问题描述】:

在 SQL Server 中,我声明了一个十进制变量,然后从一个等式中设置它。十进制变量失去精度。但是,如果我只选择方程,精度是不变的。如何在不丢失精度的情况下设置小数变量?

SQL

DECLARE @_oDiscount decimal(10,2)

SET @_oDiscount = CAST(9.99 AS decimal(10,2)) * CAST(.5 AS float)

SELECT @_oDiscount AS DecimalVariable, CAST(9.99 AS decimal(10,2)) * CAST(.5 AS float) AS Equation

输出

DecimalVariable   |   Equation
-------------------------------
5.00              |   4.995

【问题讨论】:

    标签: sql sql-server


    【解决方案1】:

    好吧,你已经将小数定义为逗号后仅包含 2 位数字

    因此,计算结果为 4.995,将四舍五入为 5.00。

    如果您改用DECIMAL(12,4),那么精度不会损失

    DECLARE @_oDiscount decimal(10,4)
    
    SET @_oDiscount = CAST(9.99 AS decimal(10,4)) * CAST(0.5 AS DECIMAL(10,4))
    
    SELECT @_oDiscount
    

    --> 返回 4.9950

    另外:我建议尽可能不要使用FLOAT

    此外:真的不需要所有这些演员......只需使用

    SET @_oDiscount = 9.99 * 0.5
    

    你会得到同样的结果。

    DECIMAL(p, s) 定义十进制值的精确度:p(精度)代表位数,而s(刻度)代表位数小数点之后。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-12-28
      • 2012-09-10
      • 1970-01-01
      • 2017-03-18
      • 2017-02-12
      • 2011-05-17
      • 2012-05-13
      • 1970-01-01
      相关资源
      最近更新 更多