在SQL Server中将钱舍入到小数

时间:2010-02-16 13:35:04

标签: sql sql-server

我正在尝试从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。

5 个答案:

答案 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