我有以下代码,它打印0.我需要正确的结果(3.571428571428571)。
此代码有什么问题?
declare @result decimal;
declare @a int; set @a = 56;
declare @b int; set @b = 2;
declare @p int; set @p = 100;
set @result = CAST(((@b / @a)*100) as decimal);
print @result
答案 0 :(得分:3)
这称为整数除法。
“如果整数被除数除以整数除数,则为结果 是一个整数,截断结果的任何小数部分。“
所以请改用小数。例如:
declare @result decimal(27,17)
declare @a decimal(25,15)
set @a = 56
declare @b decimal(25,15)
set @b = 2
set @result = (@b / @a) * 100
select @result
如果您需要将结果百分比四舍五入到小数点后两位,则可以使用decimal(5, 2)
和ROUND
:
declare @percent decimal(5,2)
declare @a decimal(25,15)
set @a = 56
declare @b decimal(25,15)
set @b = 2
set @percent = ROUND((@b / @a) * 100, 2)
select @percent
答案 1 :(得分:0)
如果你真的需要cast
,请使用:
declare @result decimal;
declare @a int; set @a = 56;
declare @b int; set @b = 2;
declare @p int; set @p = 100;
set @result = (cast(@b as decimal) / @a)*100;
print @result
它将变量@b
强制转换为decimal
,因此除法是在小数位上完成的。
如果可能,我建议将a
,b
和p
转换为小数,并在需要时将最终结果转换为整数。
答案 2 :(得分:0)
2/56的结果计算为整数。在分割之前,你必须转换/强制转换为十进制。
SQL>set ? = 2 / 56;
?
==
0
1 row found
SQL>set ? = 2 * 1.0 / 56;
?
=================
0.0357142857142
1 row found