在python中打印格式化的任意精度小数

sap*_*age 0 python printing precision arbitrary-precision

Python的任意精度小数都很可爱,但我似乎无法找到一种以格式良好的方式打印它们的方法.例如,如果我计算以下表达式:

>>> pow(2,70) -2
1180591620717411303422L
Run Code Online (Sandbox Code Playgroud)

它以2结尾,就像它应该的那样.但是,如果我尝试将其格式化为显示两个小数位,则会将其四舍五入为2 ^ 70,因为浮点数不是很精确.

>>> print "{0:.2f}".format(pow(2,70) -2)
1180591620717411303424.00
Run Code Online (Sandbox Code Playgroud)

有没有办法用我想要的格式打印而不会丢失精度?
(并且不使用任何非标准模块,如NumPy)

jco*_*ado 5

这对我有用:

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

十进制模块文档:

十进制模块支持十进制浮点运算.[...]十进制数字可以准确表示.