无理数中的更多数字

时间:2013-06-10 18:28:07

标签: python string square-root

>>> str(1.41421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702)
'1.41421356237'

有没有办法让str()在字符串中记录更多的数字?我不明白为什么它默认截断。

4 个答案:

答案 0 :(得分:5)

Python的浮点数仅使用双精度,即64位。它们根本无法表示(显着)超过您所看到的数字。

如果您需要更多内容,请查看内置的decimal模块或mpmath包。

答案 1 :(得分:2)

试试这个:

>>> from decimal import *
>>> Decimal('1.41421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702')
Decimal('1.41421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702')

float文字默认情况下会被截断以适合可用的空间(即不是因为str):

>>> 1.41421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702
1.4142135623730951

如果您需要更多小数位,请改用decimal

答案 2 :(得分:1)

Python编译器正在截断;你的浮点文字比C双重表示的更精确。如果您需要更高的精确度,请首先将数字表示为字符串。

答案 3 :(得分:0)

那是因为它正在转换为浮动。这不是转换为导致它的字符串。 您应该使用decimal.Decimal来表示如此高精度的数字。