首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何修复乘法结果的错误小数位

如何修复乘法结果的错误小数位
EN

Stack Overflow用户
提问于 2019-06-04 02:42:58
回答 3查看 242关注 0票数 0

我有一个关于以下计算的问题:

代码语言:javascript
复制
>>> print(float('32.31') * 1e9)
32310000000.000004

我需要这个结果是32310000000.0 (没有假小数位)。当直接使用浮点时,也会发生这种情况:

代码语言:javascript
复制
>>> print(32.31 * 1e9)
32310000000.000004

有没有办法避免错误的小数位?分析字符串并四舍五入到小数位数不是一个好的解决方案。

在此之前,非常感谢您。

注意:以下代码工作正常:

代码语言:javascript
复制
>>> print(32.32 * 1e9)
32320000000.0

所以我真的很高兴在测试过程中发现了上面的问题。

编辑:感谢您的快速回答!对不起,我漏掉了一个重要的问题。该方法还必须适用于结果小于1的情况,例如:

代码语言:javascript
复制
32.31 * 1e-9

在这种情况下,我不能使用round(32.31 * 1e-9, 1)

EN

回答 3

Stack Overflow用户

发布于 2019-06-04 02:47:07

如果您只对打印一个小数位感兴趣,则可以通过指定小数后的数字来使用round,在本例中为1

代码语言:javascript
复制
print(round(float('32.31') * 1e9, 1))
# 32310000000.0
票数 0
EN

Stack Overflow用户

发布于 2019-06-04 02:49:22

这是由于浮点数的二进制尾数的表示限制造成的。32.31不能用除以2的幂来表示。如果您知道您的值始终是整数(或已知的小数位数),则可以使用round()int(round())来绕过限制。

票数 0
EN

Stack Overflow用户

发布于 2019-06-04 02:55:41

我将假设您使用的是Python 3。

如果您只关心打印结果,请使用字符串格式:

代码语言:javascript
复制
print("{r:1.2f}".format(r=32.31 * 1e9))

另一种方法是使用旧的格式语法:

代码语言:javascript
复制
print("%1.1f" % (32 * 1e9))

我更喜欢第一种,但两种都行。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56432905

复制
相关文章

相似问题

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