python decimal打印所有内部小数位

时间:2014-11-13 13:15:23

标签: python math bits

我正在寻找一种打印python十进制的所有内部小数位的方法。有谁知道如何实现以下。示例代码是用Python编写的。

from decimal import *
bits = 32
precision = Decimal(1) / Decimal(2**bits)
val = decimal(1078947848)

现在发生了什么,如果我乘以val *精度我得到以下结果

val * precision
Decimal('0.2512121219187974929809570312')

但是我知道最后一个数字2不是我的号码的结尾,所以我可以做以下给我这个结果

"%.100f" % x
'0.2512121219187974929809570312500000000000000000000000000000000000000000000000000000000000000000000000'

但是不需要所有尾随零,%。100f的大小取决于给定的位。它应该是简单的数学运算,也许我应该给自己一个休息时间,但是如何从给定的位数32中得出内部小数位数。

2 个答案:

答案 0 :(得分:2)

来自documentation

  

十进制模块具有用户可更改的精度(默认为28个位置),可以与给定问题所需的一样大

您的号码长度为29位,因此默认精度略高一些。尝试增加它。 29适用于此实例,但如果您不知道稍后需要多少小数位,您可能希望选择更大的数字。

from decimal import *
getcontext().prec = 100
bits = 32
precision = Decimal(1) / Decimal(2**bits)
val = Decimal(1078947848)
print val * precision

结果:

0.25121212191879749298095703125000

此外,您可以通过调用normalize来删除这些尾随的零。

>>> print (val * precision).normalize()
0.25121212191879749298095703125

答案 1 :(得分:0)

你可以把你的字符串表示和&消除尾随0;剩下的是你的“内部小数位”,你可以计算。