C#

2017-04-27 9 views
1

을 사용하여 자동 계산 된 숫자의 축척과 정밀도를 설정하려면 사용자 입력에 따라 자동으로 금액을 계산하는 방법이 있습니다. 내 요구 사항은 해당 숫자에 대해 4로 스케일을 설정하는 것입니다. E. 금액이 49 일 경우 49.0000을 반환해야합니다. 금액이 49.2412412414이면 49.2412를 반환해야합니다. Math.Round()를 사용했지만 예제 1에서는 작동하지 않습니다. 즉, 49에서 49.0000으로 변환하지 못합니다. 내 샘플 코드 :C#

private decimal getAmount(decimal rate) 
    { 
     decimal Amount = 0; 
     Amount = 12 * rate; 
     return Math.Round(Amount, 4); 
    } 

답변

1

당신은 1.0000M 양을 곱할 수는 원하는 결과를 얻을 수 있습니다.

그러나
private decimal getAmount(decimal rate) 
{ 
    decimal Amount = 0; 
    Amount = 12 * rate; 
    Amount *= 1.0000M; 
    return Math.Round(Amount, 4); 
} 

, MSDN에 명시된 바와 같이 :

후행 0을 산술 또는 비교 연산에 진수의 값에 영향을주지 않는 것처럼 코드는 것입니다. 그러나 적절한 형식 문자열이 인 경우 끝에 오는 0이 으로 표시 될 수 있습니다.

그래서, 49 49.0000에 actully 동일하지만 값의 캐릭터 라인 표현을 원한다면 다음에 당신의 기능을 변경할 수 있습니다

private static string getAmount(decimal rate) 
{ 
    decimal Amount = 0; 
    Amount = 12 * rate; 
    return Amount.ToString("#.0000", CultureInfo.InvariantCulture); 
} 
+0

나는 그것을 진수로 반환되어야합니다. 첫 번째 해결책은 효과가없는 것 같습니다. –

+0

당신은 당신이 정밀도를하지 않는다는 의미는? –

+0

아니,이 수에 영향을 미치는되지 않는다 –

1

하는 당신은 숫자 reperesentation 구별해야 및 문자열 표현. decimal은 뒤에 오는 0을 무시합니다. 하지만 당신은 당신이 string에 진수로 변환하는 경우 표시 할 후행 0을 강제 할 수 있습니다.

decimal amount = 49.0M; 
var rounded = Math.Round(amount, 4); 
string display = rounded.ToString("#.0000", CultureInfo.InvariantCulture); // "49.0000"