2016-09-12 2 views
1

일부 환경에서는 정확한 자릿수 (숫자, 숫자 ...)는 scaleprecision으로 정의되며 축척은 모두 유효한 숫자이며 소수 자릿수는 정밀도입니다. 캐스트 된 문자열의 정밀도가 구현에 의해 정의 된 것보다 높으면 python의 10 진수 구현을 사용하여 오류를 발생시킵니다.소수 자릿수로 정밀도 적용

예를 들어, 나는 환경이 있습니다. scale = 4precision = 2입니다. 정확도가 구현의 정확도를 초과하므로 오류를 발생 시키려면 어떻게해야합니까?

decimals.Decimal('1234.1') 
decimals.Decimal('0.123') 
+0

정확히 10 진수를 원한다면 정수를 원하고 float 인 것처럼 표시 할 수 있습니까? 예를 들어 달러 금액은 정수 페니로 저장됩니다. –

+0

음. 문자열을 데이터베이스에 저장하려고합니다. 데이터베이스의 형식이 엄격합니다. 문자열이 해당 형식과 일치하는지 확인하고 싶습니다. – Dschoni

답변

2

나는 decimalmodule에서 찾을 수있는 가장 가까운을 사용하여 context.create_decimal_from_float 예에있는 Inexactcontext trap :

>>> context = Context(prec=5, rounding=ROUND_DOWN) 
>>> context.create_decimal_from_float(math.pi) 
Decimal('3.1415') 
>>> context = Context(prec=5, traps=[Inexact]) 
>>> context.create_decimal_from_float(math.pi) 
Traceback (most recent call last): 
    ... 
Inexact: None 

소수 모듈 규모의 개념을 가지고하지 않는 것 같습니다. 그것은 정밀도는 기본적으로 당신의 척도 + 당신의 정밀도입니다.

+2

'context.create (...)'와도 작동합니다. – Dschoni

+1

또한'len (string (int (...)))'는 스케일 결정을 위해 예상대로 작동합니다. – Dschoni

0

더 엄격한 클래스 Decimal을 정의하고 setter 및 생성자 함수에서 십진수를 확인할 수 있습니다. 이것은 Decimal 오브젝트와 똑같이 작동해야합니다. 단, ValueError가 생성되거나 2 자리 이상으로 설정 될 때 ValueError를 발생시킵니다.

관련 문제