百分比计算无效?

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.3333,000.00,我希望它看起来像这样33.33%,我尝试了几种变化,但由于某种原因,如果我将括号设置为双倍,则会得到.00,如果我不这样做,则不会给我.33

6个回答

12

不要乘以100,百分号格式说明符会自动进行乘以100操作。在执行除法时,只需将其转换为double类型:

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

+1 对于这个信息我不知道,但是有一个问题,它会打印出 33.3333,而我想要打印出 33.33 或者在简历中打印出带百分号的 100.00,格式为 ###.## - Guapo
@Guapo - P 指定将其显示为百分比。数字指定精度。因此,要仅显示 2 位数字,请使用 "P2" 而不是 "P5",即 perc.ToString("P2") - gilly3

5
(item.Count / query.Count) * 100

进行整数除法运算,因此(item.Count / query.Count)将始终计算为零。在除法之前将其转换为double类型即可解决此问题。
对于您的格式问题,请尝试使用String.format。
例如:string result = string.Format("string = {0:0.0%}", perc); 更多字符串格式化方法可以在这里找到:http://www.dotnetperls.com/string-format

@Yatrix 忘掉无用的函数调用吧。直接使用(double)intval即可。 - Cole Tobin
Cast是一个隐式函数调用,所以这完全取决于个人喜好。 - Yatrix

2
尝试执行(item.Count * 100d),其中的"d"表示100是一个double类型的数字。这将返回一个double类型的结果,当你将其除以query.Count时也会得到double类型的结果。
如果要表示浮点数100,可以使用100f。

1

在除法之前,您没有将(item.Count / query.Count)转换为double。因此,int*double在某些情况下为0(至少在我的代码中是这样)。请使用((double)item.Count / (double)query.Count),并将100更改为100.0或将其更改为(double)100。但是,我建议后者,因为100会在运行时而不是编译时转换为double。


1

item.Count和query.count都是整数,将它们强制转换为(float)item.Count以进行转换,否则它将执行整数除法并始终向下舍入为0。

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

0

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

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接