4
>>> str(1.41421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702)
'1.41421356237'

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

4

4 回答 4

5

Python 的浮点数仅使用双精度,即 64 位。它们根本无法代表(显着)比您看到的更多的数字。

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

于 2013-06-10T18:31:33.183 回答
2

尝试这个:

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

默认情况下,float文字会被截断以适应为其提供的空间(即不是因为str):

>>> 1.41421356237309504880168872420969807856967187537694807317667973799073247846210703885038753432764157273501384623091229702
1.4142135623730951

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

于 2013-06-10T18:31:45.047 回答
1

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

于 2013-06-10T18:32:10.167 回答
0

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

于 2013-06-10T18:35:27.213 回答