使用计算SET时,SQL DECIMAL会丢失精度

时间:2013-12-24 16:23:12

标签: sql sql-server

在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

1 个答案:

答案 0 :(得分:4)

嗯,将小数定义为包含逗号后仅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(比例)代表小数点后的位数。