带整数运算符的C#小数位

时间:2010-05-20 14:26:53

标签: c# string format decimal int

所以我有这段代码:

p.Value = 1;
decimal avg = p.Value * 100 / 10000;
string prntout = p.Key + " : " + avg.ToString();
Console.WriteLine(prntout);

但程序打印出0而不是0.01。 p.Value是一个int。我该如何解决这个问题?

4 个答案:

答案 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;

希望它有所帮助。