gpt4 book ai didi

python - Python 2.6 与 2.7 中的浮点行为

转载 作者:太空宇宙 更新时间:2023-11-03 12:40:00 27 4
gpt4 key购买 nike

所以我打开了 Python 2.6 解释器,我得到了这个:

Python 2.6.6 (r266:84292, Nov 22 2013, 12:16:22) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 2.1
2.1000000000000001
>>> 2.2
2.2000000000000002
>>> 2.2
2.2000000000000002

但是在 Python 2.7 中,我得到了更像人类的结果,如下所示:

Python 2.7.5+ (default, Sep 19 2013, 13:48:49) 
[GCC 4.8.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 5.4
5.4
>>> 1.1
1.1
>>> 0.2
0.2
>>>

我想问一下为什么会这样,我怎么可能让 Python 2.6 的行为像 2.7 一样?

最佳答案

Python 2.7 中的 float.__repr__()float.__str__() 方法发生了变化; Python 3.1 浮点到字符串的转换方法已向后移植,值现在已四舍五入。

float.__str__() 的 C 源代码使用 g 格式化程序代码将浮点值格式化为 sprintf() 函数, 精度为 12 位。

要在 Python 2.6 中获得相同的结果,您必须自己格式化字符串:

'%.12g' % fp_value

或者使用format()函数:

format(fp_value, '.12g')

请注意,在 Python 2.7 中,只有表示发生了变化,实际值并未发生变化。浮点值仍然是实数的二进制近似值,二进制小数加起来并不总是精确表示的数字。

如果您需要比 float 近似值更高的精度,您需要切换到使用 decimal.Decimal() type反而。这以牺牲速度为代价保持了精度(浮点运算在现代计算机的硬件中处理)。

关于python - Python 2.6 与 2.7 中的浮点行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20643386/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com