round() 不会截断浮点数



我不明白为什么会这样,值l/m不会被截断为点后两位小数......

root@OpenWrt:~# python3
Python 3.7.4 (default, Sep 15 2019, 18:13:03) 
[GCC 7.4.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> l = round((69.2222222/100),2)                  
>>> print(l)
0.68999999999999995
>>> type(l)
<class 'float'>
>>> m = 69.22222222/100
>>> print(m)
0.69222222220000007
>>> type(m)
<class 'float'>
>>> round(m,2)
0.68999999999999995

这发生在自定义 openWRT 18.6 构建中,并且(几乎(安装了完整的 python3。

为什么会这样?

我是否缺少任何包裹?

摘要:您得到的答案是正确的,但是它没有按预期打印。 幸运的是,无需修复构建即可轻松修复。

1(答案是正确的。 对于会话中的0.69和舍入答案,基础 C 双精度相同:

>>> (0.68999999999999995).hex()
'0x1.6147ae147ae14p-1'
>>> (0.69).hex()
'0x1.6147ae147ae14p-1'

2(构建中的打印例程省略了Python为显示尽可能短的等效表示所做的努力。这是我系统上的相同会话:

Python 3.8.1 (v3.8.1:1b293b6006, Dec 18 2019, 14:08:53) 
[Clang 6.0 (clang-600.0.57)] on darwin
Type "help", "copyright", "credits" or "license()" for more information.
>>> l = round((69.2222222/100),2)
>>> print(l)
0.69
>>> m = 69.22222222/100
>>> print(m)
0.6922222222000001
>>> round(m, 2)
0.69

3(出于显示目的,只需使用字符串格式的舍入。即使您的构建省略了最短的输出例程,这也将起作用:

>>> m = 69.22222222/100
>>> format(m, '.2f')
'0.69'

相关内容

  • 没有找到相关文章

最新更新