2012-08-03 2 views
14

십진수 '96 .154 '가 주어지면 어떻게 96.16으로 반올림 될지 (96.15를 줄 수있는 2 개의 소수로 반올림하는 것과 반대).소수점 이하를 반올림하는 방법은 무엇입니까?

+0

96.16까지 96.154 원 아래로 반올림하지 않는 방법 ~ 96.15? 반올림이 작동하는 방법에 대한 사양을 자세히 설명하는 것이 좋습니다. –

+0

이 링크를 확인하십시오. http://stackoverflow.com/questions/11740989/rounding-decimal-value/11741129#11741129 – sabz23

+0

이것이 실제 십진 유형입니까, 아니면 이중입니까? – ken2k

답변

16

해키의 종류하지만, 그렇게 할 수있는 매우 직관적 인 방법 :

var val = 96.154M; 

var result = Math.Ceiling(val * 100)/100.0M; 
+0

당신이 말하는 것처럼 가장 이상적이 아니지만 최고의 해결책으로 보입니다 –

5

나는 당신이 Math.Ceiling 방법을 찾고 생각합니다.

곱셈기와 결합하여 소수점 이하 자릿수를 지정할 수 있습니다. 이와 같이

public float roundUp(float number, int numDecimalPlaces) 
{ 
    double multiplier = Math.Pow(10, numDecimalPlaces)) 

    return Math.ceiling(number*multiplier)/multiplier; 
} 
6

값에 0.005를 더한 다음 결과를 반올림 할 수 있습니다.

+1

천재이지만 항상 0에서 멀어지기를 원한다면 어떻게 될까요? – Jodrell

+0

@ Jodrell 질문의 제목은 모두 "항상 위로"라고 말합니다. 그건 그렇고, 나는 음수에 대한 코멘트를 upvoted. –

+3

값이'96.150' 인 경우에는'96.16'으로 반올림하므로'96.15' 일 때 올바르지 않습니다. – Steven

0

다음은 값 및 기본 분수에 대한 roundUp 메소드의 코드입니다. 귀하의 질문에 사용해야하는 기본 분수는 0.05M입니다. 그러나이 방법은 기본 분수 0.5M 인 다른 일반적인 시나리오에 사용할 수 있습니다. 예를 들어 0.3M의 기본 부분을 사용하는 것과 같은 흥미로운 방식으로 적용 할 수 있습니다. 그럼 난 재미, 그것이 당신의 질문에 대답해야 희망이 있습니다

여기
static decimal roundUp(decimal aValue, decimal aBaseFraction) 
{ 
    decimal quotient = aValue/aBaseFraction; 
    decimal roundedQuotient = Math.Round(quotient, 0); 
    decimal roundAdjust = 0.0M; 
    if (quotient > roundedQuotient) 
    { 
     roundAdjust = aBaseFraction; 
    } 
    return roundAdjust + roundedQuotient * aBaseFraction; 
} 
0

는 라운드 업 방법의 나의 버전에서는이 할 수있는 특정 소수

void Main() 
{ 
    Console.WriteLine(RoundUp(2.8448M, 2)); 
    //RoundUp(2.8448M, 2).Dump(); 
} 

public static decimal RoundUp(decimal numero, int numDecimales) 
{ 
    decimal valorbase = Convert.ToDecimal(Math.Pow(10, numDecimales)); 
    decimal resultado = Decimal.Round(numero * 1.00000000M, numDecimales + 1, MidpointRounding.AwayFromZero) * valorbase; 
    decimal valorResiduo = 10M * (resultado - Decimal.Truncate(resultado)); 

    if (valorResiduo < 5) 
    { 
     return Decimal.Round(numero * 1.00M, numDecimales, MidpointRounding.AwayFromZero); 
    } 
    else 
    { 
     var ajuste = Convert.ToDecimal(Math.Pow(10, -(numDecimales + 1))); 
     numero += ajuste; 
     return Decimal.Round(numero * 1.00000000M, numDecimales, MidpointRounding.AwayFromZero); 
    } 
} 
관련 문제