如何在Python 2.7中存储带有完整小数位的浮点数?
例如:
x = 1.0/3
然后x
应该是0.333...
但是Python只存储到小数点后15位(如果我没有错)。
但是,我希望以小数位永不结束的方式存储0.33333
(保留整个小数位)。
答案 0 :(得分:3)
如果您坚持使用非符号编码方案,那么总是是您无法在无限存储空间中表示的数字。
对于您的示例1/3
,您不能仅仅因为三分球永远不会结束而将其表示为0.3333...
。对于该特定示例,您可以使用合理方案,例如分数(具有分子和分母的数字)。
然而,这对于像2的平方根或π这样的非理性无济于事。符号编码将数字保留为原始形式,而不是试图将其强制转换为1.414
ir 3.14159
,使用这些编码的系统通常会理解如何操纵这些符号。
例如,plug e(i×pi)
into Wolfram Alpha,您获得-1
。
如果您坚持或仅限于非符号方案,您只需接受将存在您无法准确表示的数字。 “解决方案”应具有足够的精度,以使错误不会累积到可见的位置。
答案 1 :(得分:0)
使用decimal模块。由于二进制表示的不精确性,它没有浮点舍入误差,您可以将精度设置为您需要的大小(理论上无穷大)。
答案 2 :(得分:-2)
您应该使用函数round
:
>>> x = 1.0/3
>>> x
0.3333333333333333
>>> y = round(x, 5)
>>> y
0.33333