首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法得到python 3中python 2的精确str(浮)结果

无法得到python 3中python 2的精确str(浮)结果
EN

Stack Overflow用户
提问于 2020-05-13 01:19:04
回答 2查看 198关注 0票数 1

我正在尝试将一些py2代码移植到py3,并且我想以某种方式再现py2将返回的浮点数的确切字符串表示形式,但在python 3中。

例如:

代码语言:javascript
复制
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中的相同行为)?

我试过这个

代码语言:javascript
复制
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 )

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-05-13 04:54:05

这个问题来自于这样一个事实:一些分数可以很容易地用十进制表示(例如,1/3 = 0.33333333…)。,有些分数不易以二进制形式表示(例如,1/3 = 0.01010101…)。但是,如果您想获得与十进制数一样一致的结果,请考虑查看小数模块(它在Python2.7和3中可用)。你可以有这样的东西:

代码语言:javascript
复制
from decimal import Decimal

a = Decimal('1.5') * Decimal('0.4')
result = str(a)
print(result)
票数 1
EN

Stack Overflow用户

发布于 2020-05-13 01:36:24

代码语言:javascript
复制
>>> a = 1.5 * 0.4
>>> print(f'{a:.1f}')
0.6
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/61764760

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档