如何使用乘法运算修改实际值 [duplicate]

How to modify the real value with a multiply operation [duplicate]

提问人: 提问时间:2/3/2020 最后编辑:halfer 更新时间:5/10/2020 访问量:96

问:

一个简单的问题:

1) 在使用 numpy 的 Python 中,如何在没有小数点的情况下获得以下结果(真值 0.6968)?:

>>> 0.67*(1.04)
0.6968000000000001

如果我转换为字符串,我可以找到正确的值:

>>> str(0.67*(1.04))
'0.6968'

2)顺便问一下,如何控制四舍五入以系统地获得实际值?我看到带有 Python(和/或 Numpy)的 epsilon 机器在 2e-16 左右

因此,我得出结论,取小数点后 16 位太小,意味着小数点后 16 位或更准确地说低于 2e-16 的随机值。

我不想拖钓,但 Matlab(我也喜欢 Python)不会产生这种错误。

Python 舍入 浮动精度

评论

1赞 Yasi Klingler 2/3/2020
我没有收到你的第二个问题。请多解释一下。
1赞 Yasi Klingler 2/3/2020
这回答了你的问题吗?在 Python 中格式化不带尾随零的浮点数
1赞 Hymns For Disco 2/3/2020
这与“寄生小数”有什么关系?
1赞 kaya3 2/3/2020
您看到的是十进制的字符串表示形式,而不是存储为双精度 IEEE 754 浮点数的实际数字。请参阅我发布的链接。
1赞 kaya3 2/3/2020
这在我发布的链接中进行了解释。

答:

0赞 Yasi Klingler 2/3/2020 #1

用于此。%g

x = 0.67*(1.04)
x = '%g'%(x)
print("x:",x)

您的问题与这篇文章重复。

评论

0赞 2/3/2020
感谢您的快速回答。有没有一种自动(或隐式)方法可以将此转换应用于我的代码中的所有浮点数,我的意思是不必显式地对所有变量中的每个变量执行操作?那就太好了。x = '%g'%(x)
1赞 Hymns For Disco 2/4/2020
@youpilat13 对所有数值仅使用十进制会更合适