1

明らかな癖がありますが、評価システムでこの種の操作を実行Math.Roundする方法はありますか。Math.Round

より大きい.0か、または等しい場合は.5、星の半分を表示します

星全体.5を表示する以上または以下の場合.0

したがって、明らかに半分の星が.5あり、全体の開始が次の全体の値になります。

半分の整数に丸める方法がわかりません。

丸めを制御する if ステートメントを書くだけでよいですか?

**編集/解決策

以下の答えから私が思いついた。

double roundedRating = (Math.Ceiling(2 * currentRating)) / 2;
4

5 に答える 5

17

2 を掛けて を実行しMath.Ceiling、2 で割って、最も近い半分を取得することをお勧めします。

于 2012-06-22T21:04:05.780 に答える
2

浮動小数点数ではなく整数に対してチェックを実行することになることを確認する必要があります。

数値に 2 を掛けることから始めます。これを整数値になるまで続けます (小数部分に値がありません)。

ここで、元の数以下の数になるまで 2 で割り続けます。結果の小数部が .0 より大きく .5 以下の場合、星の半分を表示します。.5 より大きく +.0 以下の場合は、星全体を表示します。

実際には、マットの答えに行きます。; )

于 2012-06-22T21:08:35.570 に答える
1

これは機能しますか?

数値に10を掛けて、たとえば0.1x10, 0.2x10nを求めます

Math.Ceil(n / 5) / 2 
where n = 1, 2, 3 instead of - .1, .2, .3

例:

1,2,3,4,5 = 1/2 = 0.5
6,7,8,9,10 = 2/2 = 1
11,12,13,14,15 = 3/2 = 1.5
于 2012-06-22T21:37:31.013 に答える
0
double roundedRating = (int)(currentRating * 2D + 0.999999999999999) / 2D
于 2012-06-23T06:15:55.603 に答える
0

効率が問題にならない場合は、次のアプローチを使用できます。

Number *= 10;
Number % 10 = remainder;
if(remainder <=5 && remainder != 0)
  //Half star
else
  //Whole star

ただし、そのコードはちょっと醜いですが、一般的なアイデアが得られると思います。

于 2012-06-22T21:17:29.737 に答える