0

방금 ​​Python에서 Decimal 클래스를 배웠고 십진수의 정밀도를 수정하는 데 몇 가지 문제가 있습니다. 코드 :Decimal 클래스의 정밀도 설정하기 Python

from decimal import * 

def main() : 
    getcontext().prec = 50 
    print Decimal(748327402479023).sqrt() 

if __name__ == '__main__' : 
    main() 

출력 :

대신 50 진수를 보여주는
27355573.51764029457632865944595074348085555311409538 
1.414213562373095048801688724209698078569671875376948 

, 그것은 총 50 진수를 나타낸다. 이 문제를 해결할 수있는 방법이 있습니까?

편집 : 나는 큰 부동 소수점 정밀도를 필요로하는 문제를 해결하고

. 그래서 파이썬을 사용해야합니다. 이제 문제의 답이 예를 들어 0.55라면 0.55 다음 48 제로를 인쇄해야합니다 ...

+0

0을 인쇄하려면 다음을 사용하십시오. 문자열 형식 지정 :'''print "{: .50f}"형식 (d)''' –

답변

0

한 가지 방법은 prec을 필요한 것보다 훨씬 높게 설정 한 다음 round을 사용하는 것입니다. 파이썬 3 :

>>> print Decimal(748327402479023).sqrt().quantize(Decimal('1E-50')) 
27355573.51764029457632865944595074348085555311409538175920 

prec의 값이 숫자가 얼마나 큰에 따라 달라집니다,하지만 전화 번호의 log10보다 커야한다, 또는 당신은 것입니다 :

파이썬 2의
>>> getcontext().prec=100 
>>> print(round(Decimal(748327402479023).sqrt(), 50)) 
27355573.51764029457632865944595074348085555311409538175920 
>>> print(round(Decimal(7483).sqrt(), 50)) 
86.50433515148243713481567854198645604944135142208905 

는 할 decimal.InvalidOperation: quantize result has too many digits for current context 예외를 받으십시오.

+0

십진법은 내장 부동 유형 –

+0

으로 돌아갑니다. 정확히 50 자릿수를 인쇄하고 싶습니다 ... –

+0

큰 부동 소수점 정확도가 필요한 문제를 해결하고 있습니다. 그래서 파이썬을 사용해야합니다. 이제 문제의 답이 0.55라면 0.55를 인쇄하고 48을 0으로 인쇄해야합니다. –