You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何整数运算(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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 07:40:11