我正在尝试将一些py2代码移植到py3,并且我想以某种方式再现py2将返回的浮点数的确切字符串表示形式,但在python 3中。
例如:
from __future__ import print_function
a = 1.5 * 0.4
string = str(a)
print(string)
在python3中,输出是0.6000000000000001
,vs python2,其中输出是0.6
,我理解为什么:
为什么str(float)在Python 3中返回的数字比Python 2多?
但是,是否有一种方法可以忠实地再现(在python3中)对于任意值的str(a)
(例如,py2和py3中的相同行为)?
我试过这个
import six
a = 1.5 * 0.4
string = str(a)
if six.PY3:
string = '{:.12g}'.format(a)
print(string)
上面的“几乎”可以工作,但是在a = 5
的例子中,我们将得到不同的输出( py2的5.0
和py3的5
)
发布于 2020-05-12 20:54:05
这个问题来自于这样一个事实:一些分数可以很容易地用十进制表示(例如,1/3 = 0.33333333…)。,有些分数不易以二进制形式表示(例如,1/3 = 0.01010101…)。但是,如果您想获得与十进制数一样一致的结果,请考虑查看小数模块(它在Python2.7和3中可用)。你可以有这样的东西:
from decimal import Decimal
a = Decimal('1.5') * Decimal('0.4')
result = str(a)
print(result)
发布于 2020-05-12 17:36:24
>>> a = 1.5 * 0.4
>>> print(f'{a:.1f}')
0.6
https://stackoverflow.com/questions/61764760
复制相似问题