web-dev-qa-db-ja.com

最も近い0.5に丸めるにはどうすればよいですか?

評価を表示する必要があるため、次のように増分が必要です。

数値が1.0の場合、1に等しくなければなりません。
数値が1.1の場合、1と等しくなります。
数値が1.2の場合、1に等しくなります。
数値が1.3の場合、1.5と等しくなります。
数値が1.4の場合、1.5と等しくなります。
数値が1.5の場合、1.5と等しくなります。
数値が1.6の場合、1.5と等しくなります。
数値が1.7の場合、1.5と等しくなります。
数値が1.8の場合、2.0と等しくなります。
数値が1.9の場合、2.0と等しくなります。
数値が2.0の場合、2.0と等しくなります。
数値が2.1の場合、2.0と等しくなります。
等々...

必要な値を計算する簡単な方法はありますか?

90
Murtaza Mandvi

評価を2倍し、Math.Round(rating, MidpointRounding.AwayFromZero)を使用して丸め、その値を2で除算します。

Math.Round(value * 2, MidpointRounding.AwayFromZero) / 2

188
John Rasch

2で乗算、丸め、2で除算

最も近い四半期が必要な場合は、4で乗算し、4で除算するなど

61
Neil N

常に任意の値に切り上げまたは切り捨てる、私が書いたいくつかのメソッドを次に示します。

public static Double RoundUpToNearest(Double passednumber, Double roundto)
{
    // 105.5 up to nearest 1 = 106
    // 105.5 up to nearest 10 = 110
    // 105.5 up to nearest 7 = 112
    // 105.5 up to nearest 100 = 200
    // 105.5 up to nearest 0.2 = 105.6
    // 105.5 up to nearest 0.3 = 105.6

    //if no rounto then just pass original number back
    if (roundto == 0)
    {
        return passednumber;
    }
    else
    {
        return Math.Ceiling(passednumber / roundto) * roundto;
    }
}

public static Double RoundDownToNearest(Double passednumber, Double roundto)
{
    // 105.5 down to nearest 1 = 105
    // 105.5 down to nearest 10 = 100
    // 105.5 down to nearest 7 = 105
    // 105.5 down to nearest 100 = 100
    // 105.5 down to nearest 0.2 = 105.4
    // 105.5 down to nearest 0.3 = 105.3

    //if no rounto then just pass original number back
    if (roundto == 0)
    {
        return passednumber;
    }
    else
    {
        return Math.Floor(passednumber / roundto) * roundto;
    }
}
14
NER1808
decimal d = // your number..

decimal t = d - Math.Floor(d);
if(t >= 0.3d && t <= 0.7d)
{
    return Math.Floor(d) + 0.5d;
}
else if(t>0.7d)
    return Math.Ceil(d);
return Math.Floor(d);
1
Akash Kava

いくつかのオプションがあります。パフォーマンスが懸念される場合は、それらをテストして、大規模なループでどれが最も速く機能するかを確認します。

double Adjust(double input)
{
    double whole = Math.Truncate(input);
    double remainder = input - whole;
    if (remainder < 0.3)
    {
        remainder = 0;
    }
    else if (remainder < 0.8)
    {
        remainder = 0.5;
    }
    else
    {
        remainder = 1;
    }
    return whole + remainder;
}
1
John Fisher

0.5に最も近い値に丸める必要があるように聞こえます。これを行うC#APIにはroundのバージョンがありません(1つのバージョンでは、丸めるのに多数の10進数を使用しますが、これは同じではありません)。

10分の1の整数のみを処理する必要があると仮定すると、round (num * 2) / 2を計算するだけで十分です。任意の精度の小数を使用している場合は、扱いにくくなります。あなたがそうしないことを望みましょう。

1
Paul Brinkley
Public Function Round(ByVal text As TextBox) As Integer
    Dim r As String = Nothing
    If text.TextLength > 3 Then
        Dim Last3 As String = (text.Text.Substring(text.Text.Length - 3))
        If Last3.Substring(0, 1) = "." Then
            Dim dimcalvalue As String = Last3.Substring(Last3.Length - 2)
            If Val(dimcalvalue) >= 50 Then
                text.Text = Val(text.Text) - Val(Last3)
                text.Text = Val(text.Text) + 1
            ElseIf Val(dimcalvalue) < 50 Then
                text.Text = Val(text.Text) - Val(Last3)
            End If
        End If
    End If
    Return r
End Function
0
user2260011