2014-02-05 1 views
2

이전에 본 적이없는 경우가 있습니다..NET 소수점 형식은 소스에 따라 다르게 나타납니다.

코드를 통해 10 진수 값을 지정하는 경우가 있습니다. 같은 필드가 EntityFramework에서 할당 될 때 foo.DecimalField = 200M; 내가 어떤 포맷이나 문화이 ToString() 값이, 내가 다른 경우 값 "200"

를 얻을, 디버거는 여전히 필드의 정확한 값이 200M 것을 말한다 하지만 ToString()을 입력하면 "200.00"

여기에 부동 소수점 문제가 있거나 디버거에 숨겨진 소수가있는 경우 표시됩니다.

하지만 고정 소수점 십진 형식을 사용하고 있으므로 어떻게 될까요? 웹 서버 또는 문화 나 그와 관련된 문제에 영향을 줄 수있는 것이 없습니다.

무엇이 누락 되었습니까? 는 소수점 타입 동작합니다는 다르게 초기화 방법에 따라 수 Double 달리

+1

아마도 SSCCE –

+0

을 만들 수 있습니다. 'decimal'은 여전히 ​​부동 소수점 유형입니다. 이진수가 아닌 십진수입니다. – dreamlax

+1

10 진수는 연산을 수행 할 때 정밀도를 유지하므로 다른 정밀도로 계산하여 두 숫자를 얻은 경우 예상되는 동작입니다. –

답변

3

, Decimal가 제로, 예를 들어, 보존 (I 내부적으로 EF에서를 가져 오는 경우 소수를 inits 일부 독자가 있다고 가정)

Decimal d0 = 200M; 
    Decimal d1 = 200.0M; 
    Decimal d2 = 200.00M; 

    // 200 
    String St0 = d0.ToString(); 
    // 200.0 (or 200,0 depending on CultureInfo.CurrentCulture) 
    String St1 = d1.ToString(); 
    // 200.00 
    String St2 = d2.ToString(); 

는 그래서 계산의 과정에서, 데이터베이스 등을 하나 개의 값을 읽는 것은 다른 200.00M 동안 200M로 보이는 것 같다.

+1

이 "article"은 약간의 통찰력을 제공합니다. http://csharpindepth.com /Articles/General/Decimal.aspx (간단히 지수가 저장되므로 소수점의 수를 "안다") – flindeberg

관련 문제