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括弧を2倍に設定すると取得.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) は常にゼロに評価されます。除算の前に double としてキャストすると、これが修正されます。

フォーマットの問題については、 String.format を使用してみてください

すなわち。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) 100 が double であることを指定した "d" を実行してみてください。double を返します。また、query.Count で除算する場合も同様です。

フロート 100 の場合は 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)除算の前に double にキャストしていません。したがって、 int*double は何らかの理由で (少なくとも私のコードでは) 0 です。((double)item.Count / (double)query.Count)して、 に変更100するか100.0、 に変更し(double)100ます。ただし、コンパイル時ではなく実行時に 100 が double に変換されるため、後者をお勧めします。

于 2012-05-29T23:39:21.217 に答える
0

に変更100します100.00。int ではないことを知る必要があります

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