这是一个非常有趣的事情,不确定为什么会发生,但当我这样做时:
(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.33
或33,000.00
,我希望它看起来像33.33%
,我尝试了几种变化,但由于某种原因它不会让我得到.33
如果我将括号设置为加倍,它会得到.00
,如果我不这样做,它就不会给我.33
答案 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"));