[c#] 가장 가까운 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;
    }
}


답변

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

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


답변

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


답변

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

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


답변

나는이 문제에도 어려움을 겪었다. 저는 주로 Adobe Flash Platform의 기본 코딩 인 Actionscript 3.0으로 코딩하지만 언어에는 유사점이 있습니다.

내가 생각 해낸 해결책은 다음과 같습니다.

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

그게 다야. ‘숫자’와 ‘정수’의 사용과 처리 방식에 유의하십시오.

행운을 빕니다!