在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
答案 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
(比例)代表>小数点后的位数。