web-dev-qa-db-ja.com

C#で小数点以下1桁に丸めます

回答を小数点以下1桁に丸めたいと思います。例:6.7、7.3など。ただし、Math.roundを使用すると、答えは常に小数点以下の桁数がなくなります。例:6、7

私が使用したコードは次のとおりです。

int [] nbOfNumber = new int[ratingListBox.Items.Count];
int sumInt = 0;
double averagesDoubles;

for (int g = 0; g < nbOfNumber.Length; g++)
{
    nbOfNumber[g] = int.Parse(ratingListBox.Items[g].Text);
}

for (int h = 0; h < nbOfNumber.Length; h++)
{
    sumInt += nbOfNumber[h];
}

averagesDoubles = (sumInt / ratingListBox.Items.Count);
averagesDoubles = Math.Round(averagesDoubles, 2);
averageRatingTextBox.Text = averagesDoubles.ToString();
18
Pé Bin

intで割っていますが、結果としてintを返します。 (13/7 = 1になる)

最初に浮動小数点にキャストしてみてください:

_averagesDoubles = (sumInt / (double)ratingListBox.Items.Count);
_

averagesDoubles = Math.Round(averagesDoubles, 2);は、double値の丸めを担当します。 _5.976_は_5.98_に丸められますが、これは値の表示には影響しません。

ToString()は、小数の表示を担当します。

試してください:

_averagesDoubles.ToString("0.0");
_
48

averagesDoublesMath.Round の定義に従ってdoubleまたはdecimalであることを確認し、これらの2行を結合します。

averagesDoubles = (sumInt / ratingListBox.Items.Count);
averagesDoubles = Math.Round(averagesDoubles, 2);

宛先:

averagesDoubles = Math.Round((sumInt / ratingListBox.Items.Count),2);

上記の場合の2は、切り上げたい小数の数を表します。詳細については、上記のリンクを確認してください。

5
Vandesh

int除算は常に小数部を無視します

 (sumInt / ratingListBox.Items.Count); 

ここでsunintはintであり、ratingListBox.Items.Counもintであるため、divisonは小数になりません

fractionの値を取得するには、floatのようなデータ型とsumIntをキャストし、floatとdoubleにカウントしてからdivisonを使用する必要があります

1
TalentTuner

var val = Math.Ceiling(100.10m);結果101

0
Narendra Singh