3

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

(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

4

6 回答 6

12

不要乘以 100,百分比格式说明符会为您执行此操作。double执行除法时只需转换为:

double perc = (double)item.Count / (double)query.Count;
MessageBox.Show(perc.ToString("P5"));
于 2012-05-29T23:39:29.227 回答
5
(item.Count / query.Count) * 100

正在进行整数除法,因此 (item.Count / query.Count) 将始终计算为零。在除法之前作为双打将解决此问题。

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

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

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

于 2012-05-29T23:36:24.990 回答
2

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

100f 为浮百

于 2012-05-29T23:43:32.860 回答
1

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

((float)item.Count / (float)query.Count) * 100;
于 2012-05-29T23:37:27.703 回答
1

您不会(item.Count / query.Count)在分区之前进行双打。所以一个 int*double 是 0 出于某种原因(至少在我的代码中)。执行((double)item.Count / (double)query.Count)并更改100100.0或更改为(double)100。但是,我推荐后者,因为 100 在运行时而不是在编译时转换为双精度。

于 2012-05-29T23:39:21.217 回答
0

将您的更改100100.00. 它需要知道它不是一个 int 尝试:

double perc = ((double)item.Count * 100.00) / (double)query.Count; 
MessageBox.Show(perc.ToString("P5")); 
于 2012-05-29T23:38:40.193 回答