2010-04-06 1 views
3

C# (VS 2008 SP1)에서 반올림 통화가 흥미 롭습니다.C# 서식 통화

alt text http://img697.imageshack.us/img697/8500/testcases.png

내가 기대 한 경우 다섯, 여섯, 일곱 (출력에서 그들을 번호없는 내 나쁜) 페니에 숫자를 반올림하기 : 아래는 테스트 케이스의 이미지입니다. 여기

내 테스트 코드입니다 : 내가

에 대한 호출을 가지고

public string ToString(string format) 
{ 
    return Number.FormatDecimal(this, format, NumberFormatInfo.CurrentInfo); 
} 

발견에 내가 무슨 일이 있었는지보고로 .toString (문자열 형식)에 반영

static void Main(string[] args) 
{ 
    decimal one = 10.994m; 
    decimal two = 10.995m; 
    decimal three = 1.009m; 
    decimal four = 0.0044m; 
    decimal five = 0.0045m; 
    decimal six = 0.0046m; 
    decimal seven = 0.0049m; 
    decimal eight = 0.0050m; 

    Console.WriteLine(one + ": " + one.ToString("C")); 
    Console.WriteLine(two + ": " + two.ToString("C")); 
    Console.WriteLine(three + ": " + three.ToString("C")); 
    Console.WriteLine(four + ": " + four.ToString("C")); 
    Console.WriteLine(five + ": " + five.ToString("C")); 
    Console.WriteLine(six + ": " + six.ToString("C")); 
    Console.WriteLine(seven + ": " + seven.ToString("C")); 
    Console.WriteLine(eight + ": " + eight.ToString("C")); 

    Console.ReadLine(); 
} 

[MethodImpl(MethodImplOptions.InternalCall)] 
public static extern string FormatDecimal(
    decimal value, 
    string format, 
    NumberFormatInfo info); 

NumberFormatInfo에 대한 현재 culture 설정의 세분성을 나타내는 논리가 해당 호출에 있습니까? 열세 번째 소수 자리 때문에 열세 번째 자리가 중요하지 않으므로 숫자를 굴리지 마라.

이 방법은 어떻게 구현됩니까? 우리는 조금씩 움직이는 땅에 가나, 아니면 다른 일이 있습니까?

통찰력을 주셔서 감사합니다.

+0

는, 당신은 반 페니에 첫 라운드에 필요 Math.Round (5, 3, MidpointRounding.AwayFromZero) :이 결과는 페니쪽으로 반올림됩니다. –

+0

밀리 톨라를 측정하는 문화권을 찾으십시오. –

+1

"아냐, 너는 이해가 안돼. 매우 복잡해. 어쨌든 총계에요. 그래서 나는 여기서 1 페니 분량에 대해 이야기하고 있습니다. 그리고 시간이 지남에 따라 많은 것들이 합쳐집니다." http://www.imdb.com/title/tt0151804/quotes?qt0996772 – blu

답변

8

기본 수학 원리에 따라 사례 4, 5, 6 및 7은 1 페니까지 올림해서는 안됩니다. 가장 오른쪽 숫자부터 시작하여 반올림하지 마십시오. 반올림하려는 번호 오른쪽의 한 자리 만 보입니다. 그들이 해야하는로

http://www.enchantedlearning.com/math/rounding/

컴퓨터

그냥 기본적인 수학을 수행하고 있습니다.

편집 -

를 추가 더 나은 링크 : 당신이 정말로 경우 5, 6, 7 센트까지 반올림하려면 http://math.about.com/od/arithmetic/a/Rounding.htm

+0

흥미 롭습니다. 그럼 사건 1은 어때요? – blu

+0

경우 1에서 마지막 자릿수는 마지막 9 자릿수를 반올림합니다. 9 + 1 = 10 이래로 다음 9 인치는 1이 더해져야하고 그 이후로 9가됩니다. – David

+0

OK, 그래서 우리는 백 번째 자리로 반올림한다고 말합니다. 바로 오른쪽으로. OK, 좋은 대답입니다, 고마워요. – blu