2012-01-07 4 views
0

파이썬의 임의의 정밀도 소수는 멋지지만 멋지게 형식화 된 방식으로 인쇄 할 수있는 방법을 찾을 수 없습니다. 나는 다음과 같은 식을 계산 예를 들어, : 그것은해야처럼파이썬에서 형식화 된 임의의 정밀도 자릿수 인쇄

>>> pow(2,70) -2 
1180591620717411303422L 

는, 2에서 끝납니다. 그러나 소수 자릿수를 두 자릿수로 표시하려고하면 부동 소수점이 정확하지 않기 때문에 2^70으로 반올림됩니다.

>>> print "{0:.2f}".format(pow(2,70) -2) 
1180591620717411303424.00 

정밀도를 잃지 않고 원하는 형식으로 인쇄 할 수 있습니까?
(및 비표준 같은 NumPy와 같은 모듈을 사용하지 않고) 이것은 나를 위해 작동

+2

나는 그것을 얻지 못한다. 소수점 이하의 정수를 출력하고 싶습니까? 왜? 어때?'print '{} .00 ".format (pow (2,70) - 2)'? 귀하의 경우, –

+0

소수 자릿수는 항상 .00입니다. – joaquin

+0

계산 결과를 소수점 이하 자릿수로 출력하고 싶을 때가 있는데, 그 계산은 때때로 분수 값을 반환합니다. 이 예제에서 정수 만 사용했기 때문에 문제가 발생하기에 충분히 큰 쉬운 숫자 였기 때문에 – sapphiremirage

답변

5

:

소수 모듈 소수점에 대한 지원을 제공하십시오 decimal 모듈 문서에서

>>> import decimal 
>>> '{0:.2f}'.format(decimal.Decimal((pow(2,70)-2))) 
1180591620717411303422.00 

을 부동 소수점 산술. [...] 십진수는 정확하게 나타낼 수 있습니다.

+0

시도해 보았지만 제대로 작동하지 않는다고 생각했지만 지금은 대부분 제대로 작동하는 것 같습니다. 나는 여전히 (pow (2,70) + .75)와 같은 것으로 작동시키지 못하지만, 이것은 이론적 인 경우 (적어도 지금까지는) 인 것으로 보이며 그것에 대해 걱정할 필요가 없다. – sapphiremirage

+0

@sapphiremirage이 경우 다른 연산을하기 전에'decimal'로 변환해야합니다 :'decimal.Decimal (pow (2,70)) + decimal.Decimal (0.75)' – jcollado

관련 문제