为何整数运算(x/y*100)转换为Decimal类型后结果为0?
为什么这段代码输出0?
这个问题其实是C#里整数除法的典型陷阱,我来给你拆解一下背后的原因:
首先,核心问题出在整数类型的运算规则上,我们一步步看代码的执行流程:
第一步执行
x / y:
你的x和y都是int(整数)类型,在C#中,两个整数做除法时会触发整数除法——也就是直接舍去所有小数部分,只保留商的整数部分。所以45 / 100的结果不是你预期的0.45,而是0。第二步执行
x / y * 100:
上一步得到的0依然是int类型,乘以100之后还是int类型的0。第三步执行
Convert.ToDecimal(...):
把整数0转换为Decimal类型,结果自然还是0。
怎么修改才能得到预期结果?
要避免这个问题,你只需要在运算前把其中一个操作数转换成非整数类型(比如Decimal或double),让运算按照小数/浮点除法规则执行:
方法1:优先转换为Decimal(推荐,精度更高)
var x = 45; var y = 100; var z = Convert.ToDecimal(x) / y * 100; // 结果为45m
方法2:用double中转(适合对精度要求不高的场景)
var x = 45; var y = 100; var z = (decimal)((double)x / y * 100); // 结果同样为45m
这样修改后,不管x和y是不是规整整数,都能得到正确的小数运算结果,再乘以100就能得到你想要的数值啦。
内容的提问来源于stack exchange,提问作者Sam
相关产品推荐
相关产品推荐

