2009-03-03 6 views
3

XML 스프레드 시트에서 무작위 예 : "0.58"와 같은 숫자 값 "0.57999999999999996로 변경 보인다 엑셀 2007숫자 정밀도 문제는 XML

를 사용하여 2003 형식으로 문서를 저장할 때 나는 이상한 문제가 발생하고로 저장할 때 ".

정말 이상한 점은 Excel에있을 때이 문제가 보이지 않는다는 것입니다. 텍스트 편집기에서 직접 XML 데이터를 볼 때만 볼 수 있습니다.

이전에이 문제가 발생 했습니까? 그렇다면 해결 방법이나 해결 방법이 있습니까?

+0

문제가 일관성이 없다고 언급 한 다른 의견을 읽었습니다. 동일한 값 (예 : 0.58이 0.57999999, 때로는 0.58) 또는 다른 값 (예 : 0.58이 좋지 않음, 0.59가 양호한 경우 등)을 의미 했습니까? – user53794

+0

예, 1.40의 문제가 있습니다. 때로는 1.400000000001로 저장되며 때로는 1로 저장되기도합니다.40 (둘 다 xml). –

답변

4

Excel은 숫자 데이터를 부동 소수점으로 저장합니다. 소수 자릿수 (소수 부분)의 오른쪽 숫자는 근사치입니다. 0.58은 정확히 0.58 인 부동 소수점 수로 표현 될 수 없습니다.

XML 파일을로드 할 때 숫자를 부동 소수점 또는 고정 소수점 decimal 클래스 (예 : C#의 Decimal)로 다시 변환해야합니다.

0

숫자 0.58은 0.57999999999999996과 같습니다. 즉, 의 차이가 0이거나, 다른 말로하면 입니다.

이제 "일반"고등학교 수학을 사용하는 경우 동의하지 않을 수 있습니다. Excel은 그렇지 않으며 일반적으로 컴퓨터는 그렇지 않습니다. 그들은 유한 비트 세트를 사용합니다. 바이너리에서 0.58의 정확한 표현은 무한한 비트 집합을 사용하므로 일부 비트는 손실됩니다.

+0

문제는이 번호가 재무에 사용된다는 것입니다. 우리가 소수점 두 자리까지 올림하는 작업을 수행하지 않는 한 센트의 이러한 분수는 100 % 정확하지 않은 값을 산출합니다. 정말 이상한 점은이 문제가 일관성이 없다는 것입니다. – bitstream

+0

...하지만 당신이 말하는 것을 이해합니다. 이것을 설명해 주셔서 감사합니다. – bitstream

+1

금융에 대해서도 중요하지 않습니다. 그들은 어쨌든 센트로 세고 있어야합니다. – MSalters

2

키가 Excel에서 숫자를 기본 2 부동 소수점 숫자로 저장한다는 것이 핵심입니다. 대부분의 십진수는 기본 2 부동 소수점 수로 표현 될 수 없습니다.

"0.58은 부동 소수점으로 표현할 수 없습니다"라는 답변이 있습니다. 0.58이 .NET Decimal 형식과 같은 기본 10 부동 소수점 숫자 형식으로 나타낼 수 있기 때문에 올바르지 않습니다. 물론 Excel에서 숫자에 사용되는 기본 형식을 변경할 수 없기 때문에이 점은 좋지 않습니다.

Excel은 항상 수식 표시 줄에 15 개의 유효 자릿수로 반올림 한 숫자를 표시합니다. 따라서이 숫자는 "정확히"0.58이 아니더라도 수식 입력 줄에 0.58로 표시되며 Excel의 기본 숫자 형식의 제한으로 인해 정확히 0.58이 될 수 없습니다.

표시되는 정밀도를 켜는 것이 좋습니다. Excel 2007에서는 Excel 옵션 -> 고급 ->이 통합 문서를 계산할 때 : -> 표시된 정밀도 설정) - Excel에서이 값을 반올림 할 수도 있고 그렇지 않을 수도 있습니다 XML로 저장할 때 특정 번호를 사용하지만 적어도 일관된 결과를 제공합니다. Precision As Displayed는 계산 결과를 반올림 할뿐만 아니라 이미 숫자 셀에 저장되어있는 숫자를 되돌릴 수 있으며 계산 결과를 반올림하므로이 부분은 되돌릴 수 있으므로 반올림하지 말고 조심하십시오. 표시되는 정밀도는 숫자 형식에 따라 바뀌므로 "0.00"의 숫자 형식을 사용하면 소수점 두 자리까지 반올림됩니다. 그러나 대부분의 소수점 이하 자리수는 Excel의 기본 2 숫자 시스템에서 나타낼 수 없으므로 0.58이 여전히 동일하게 나타날 수 있습니다 XML에 쓰여질 때. "일반"으로 포맷 된 숫자는 표시되는 정밀도가 설정된 상태에서 정밀도 15 자리로 반올림됩니다.