所以我有这段代码:
p.Value = 1;
decimal avg = p.Value * 100 / 10000;
string prntout = p.Key + " : " + avg.ToString();
Console.WriteLine(prntout);
但程序打印出0而不是0.01。 p.Value是一个int。我该如何解决这个问题?
答案 0 :(得分:3)
将其中一个文字更改为小数:
decimal avg = p.Value * 100m / 10000;
现在,解释为什么会这样:
让我们一次处理原始行一行,用1代替p.Value:
decimal avg = 1 * 100 / 10000; // int multiplication
decimal avg = 100 / 10000; // int division, remainder tossed out
decimal avg = (decimal) 0; // implicit cast
通过改变100到100米,它现在是:
decimal avg = 1 * 100m / 10000; // decimal multiplication
decimal avg = 100m / 10000; // decimal division
decimal avg = 0.01m;
答案 1 :(得分:1)
表达式p.Value * 100 / 10000
仅使用整数类型,因此根据integer division规则进行评估。
将一个(或多个)参数更改为小数,它将按预期执行:
p.Value * 100 / 10000m
答案 2 :(得分:1)
尝试更改此内容:
decimal avg = p.Value * 100 / 10000;
到
decimal avg = Convert.ToDecimal(p.Value) * 100.0 / 10000.0;
您之前的版本使用了所有整数。
答案 3 :(得分:0)
如果P.Value是一个整数,你可能会失去这一行的分数:
decimal avg = p.Value * 100/10000;
所以你可以这样做:
十进制avg =(十进制)P.Value * 100/10000;
希望它有所帮助。