百分比计算不起作用?

时间:2012-05-29 23:33:40

标签: c# .net-4.0 percentage

这是一个非常有趣的事情,不确定为什么会发生,但当我这样做时:

(item.Count / query.Count) * 100

只要回复0并且当我这样做时,它不会给我任何错误:

(item.Count * 100) / query.Count

它运作得很好,我在这里缺少什么?

我遇到的另一个问题是将其输出格式化为字符串:

double perc = (item.Count * 100) / query.Count;
MessageBox.Show(perc.ToString("P5"));

不起作用给了我一个巨大的金额,如33,333.3333,000.00,我希望它看起来像33.33%,我尝试了几种变化,但由于某种原因它不会让我得到.33如果我将括号设置为加倍,它会得到.00,如果我不这样做,它就不会给我.33

6 个答案:

答案 0 :(得分:12)

不要乘以100,Percent Format Specifier会为你做到这一点。执行除法时,只需转换为double

double perc = (double)item.Count / (double)query.Count;
MessageBox.Show(perc.ToString("P5"));

答案 1 :(得分:5)

(item.Count / query.Count) * 100

正在进行整数除法,因此(item.Count / query.Count)将始终求值为零。在分裂之前施放双打将解决这个问题。

对于格式问题,请尝试使用String.format

即。 string result = string.Format("string = {0:0.0%}", perc);

可以在此处找到更多字符串格式化方法:http://www.dotnetperls.com/string-format

答案 2 :(得分:2)

尝试做(item.Count * 100d)“d”指定100是双精度型。会给你一个双倍的回报,当你要除以query.Count

100f for floating hundred

答案 3 :(得分:1)

item.Count和query.count是整数,将它们像(float)item.Count一样转换为它们,否则它将进行整数除法并始终向下舍入为0.

((float)item.Count / (float)query.Count) * 100;

答案 4 :(得分:1)

你没有在分裂前将(item.Count / query.Count)强制转换为双倍。所以int * double由于某种原因是0(至少在我的代码中)。执行((double)item.Count / (double)query.Count)并将100更改为100.0或将其更改为(double)100。但是,我推荐的后者在运行时而不是在编译时转换为double。

答案 5 :(得分:0)

将您的100更改为100.00。它需要知道它不是一个int 尝试:

double perc = ((double)item.Count * 100.00) / (double)query.Count; 
MessageBox.Show(perc.ToString("P5"));