我正在尝试从SQL Server 2008中的两个类型money变量舍入到3个小数位。
DECLARE @Val1 money = 554.5344
DECLARE @Val2 money = 84020.37
DECLARE @Result decimal(6,5) = @Val1/@Val2 *100
SELECT @Result
上面的结果是0.65。使用计算器它是0.65999995001212,我需要的结果是0.659。
答案 0 :(得分:2)
结果不能为0.659 - 舍入到5位的确切结果为0.66000。
你永远不应该用钱来分钱:)至少不要直接;正确的结果可以如下获得:
DECLARE @Val1 money = 554.5344
DECLARE @Val2 money = 84020.37
DECLARE @Result decimal(6,5) = cast(@Val1 as float)/@Val2*100
SELECT @Result
答案 1 :(得分:2)
试试这个:
DECLARE @Val1 money = 554.5344
DECLARE @Val2 money = 84020.37
DECLARE @Result decimal(6,3) = @Val1 * 100 / @Val2
SELECT @Result
你的问题是,MONEY只有4位小数,所以当你将554.5344除以84020.37时得到0.0065,所以当你乘以100得到0.6500时。如果你先乘以100,你将55453.44除以84020.37并得到0.659,这就是你想要的。
答案 2 :(得分:1)
如果你希望0.659999被'四舍五入'到0.659,你就是截断,而不是四舍五入......
此外,您可能希望使用标准ROUND function,它也可用于截断。见the answers to this question
答案 3 :(得分:0)
要获得与计算器相同的结果,您需要使用FLOAT,而不是MONEY:
DECLARE @Val1 float
DECLARE @Val2 float
SET @Val1= 554.5344
SET @Val2= 84020.3700
DECLARE @Result float
SET @Result = @Val1/@Val2 *100
SELECT @Result
给出:0.65999995001212
答案 4 :(得分:0)
要获得十进制之后的所有值,您应该使用float。 然后使用round [1]函数。
DECLARE @ Val1 float
DECLARE @ Val2浮动
SET @ Val1 = 554.5344
SET @ Val2 = 84020.3700
DECLARE @Result浮动
SET @Result = round(@ Val1 / @ Val2 * 100,3)
SELECT @Result