developer tip

가장 가까운 0.5로 반올림하려면 어떻게합니까?

copycodes 2020. 8. 31. 08:00
반응형

가장 가까운 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 같아야합니다 .

필요한 값을 계산하는 간단한 방법이 있습니까?


평점에 2를 곱한 다음를 사용하여 반올림 Math.Round(rating, MidpointRounding.AwayFromZero)한 다음 해당 값을 2로 나눕니다.

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


2를 곱하고 반올림 한 다음 2로 나눕니다.

가장 가까운 분기를 원하면 4로 곱하고 4로 나누기 등


다음은 항상 임의의 값으로 반올림하거나 내림하는 몇 가지 방법입니다.

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;
    }
}

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);

몇 가지 옵션이 있습니다. 성능이 문제라면 대형 루프에서 가장 빠르게 작동하는 것이 무엇인지 테스트하십시오.

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;
}

가장 가까운 0.5로 반올림해야하는 것 같습니다. 이 작업 round을 수행하는 C # API의 버전이 없습니다 (한 버전은 반올림 할 소수 자릿수를 사용하지만 동일한 것은 아닙니다).

10 분의 1의 정수만 처리하면된다고 가정하면 round (num * 2) / 2. 임의로 정확한 소수를 사용하는 경우 더 까다로워집니다. 그러지 않기를 바랍니다.


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

I had difficulty with this problem as well. I code mainly in Actionscript 3.0 which is base coding for the Adobe Flash Platform, but there are simularities in the Languages:

The solution I came up with is the following:

//Code for Rounding to the nearest 0.05
var r:Number = Math.random() * 10;  // NUMBER - Input Your Number here
var n:int = r * 10;   // INTEGER - Shift Decimal 2 places to right
var f:int = Math.round(r * 10 - n) * 5;// INTEGER - Test 1 or 0 then convert to 5
var d:Number = (n + (f / 10)) / 10; //  NUMBER - Re-assemble the number

trace("ORG No: " + r);
trace("NEW No: " + d);

Thats pretty much it. Note the use of 'Numbers' and 'Integers' and the way they are processed.

Good Luck!


The Correct way to do this is:

  public static Decimal GetPrice(Decimal price)
            {
                var DecPrice = price / 50;
                var roundedPrice = Math.Round(DecPrice, MidpointRounding.AwayFromZero);
                var finalPrice = roundedPrice * 50;

                return finalPrice;

            }

참고URL : https://stackoverflow.com/questions/1329426/how-do-i-round-to-the-nearest-0-5

반응형