저는 1.1의 float 값을 줄 수있는 JSON 데이터 파일을 읽었습니다. 이 값을 Decimal
으로 만들면 수레의 이진 표현의 부정확성 때문에 미친 긴 숫자가 나옵니다.Decimal (str (my_float))은 Decimal (my_float)보다 좋을 것 같습니다. 어떻게 된 것입니까?
저는 이진 표현을 이해합니다. 기수 10 부동 소수점에서 쓸 수있는 숫자를 기수 2로 표현할 수는 없다는 생각에 괜찮습니다.
하지만 내가 먼저 float 문자열을 ify 값으로 사용하는 Decimal로 만들면 작은 바이너리 부정확성 델타가없는 Decimal을 얻을 수 있습니다. 여기
는 I의 의미는 다음과 같습니다Python 2.7.6 (default, Jan 16 2014, 10:55:32)
>>> from decimal import Decimal
>>> f = 1.1
>>> d = Decimal(f)
>>> f
1.1
>>> d
Decimal('1.100000000000000088817841970012523233890533447265625')
>>> d = Decimal(str(f))
>>> d
Decimal('1.1')
문자열-ifying 입력으로 (또는에서 읽을 진수로하기 전에 플로트 것은 가까운 원래베이스 열 수에 나에게 결과를 제공하는 것 JSON 파일).
내 질문은 다음과 같습니다. float을 문자열로 만들 때 긴 자릿수가 보이지 않는 이유는 무엇입니까? Python이 JSON에서 파싱 된 원래 문자열을 자동으로 추적하고 있습니까? 왜 Decimal 생성자는 그 트릭을 사용하지 않습니까?
"왜 Decimal 생성자는이 트릭을 사용하지 않습니까?" 분명히'decimal' 모듈의 설계자는 엄격한 정확도가 더 나은 결과라고 생각했습니다. 모듈의 전체적인 점은 바이너리로 표현할 수없는 십진수로 작업하기 때문에 왜 그렇게 생각할 지 모르겠다. 당신이 보는 숫자는 그때마다 정확합니다. 역이 사실이 아니더라도 이진수는 항상 십진수로 나타낼 수 있습니다. –