我想出了一个公式来保持数字简单int
并且惊讶地看到以下产生了0。
var x = 45;
var y = 100;
var z = Convert.ToDecimal(x / y * 100);
在上面的例子中,我将100
除以100
,然后乘以x
,但在大多数情况下,y
和x
值几乎是荒谬的不是很好的整数。
当我的y
和0
值最终为整数时,上述转换会生成{{1}}。那是为什么?
答案 0 :(得分:2)
X / Y = 0.45
0.45的Int转换为0.
因此0 * 100 = 0。
因此Convert.ToDecimal(0)为0.
答案 1 :(得分:1)
这看起来有点奇怪,但问题在于表达式的计算顺序:首先评估Convert的参数,并在整数中完成。这就是结果被截断的原因。
您应该使用强制进行小数评估的表达式替换会话:
var z = 100M * x / z;