python - 浮点错误的发生以及如何防止它们
问题描述
我有这个程序计算用户输入的所有值的总数:
result = 0
for i in range(3):
n = float(input("Enter a value: "))
result = result + n
print(result)
如果我输入值 1.2、1.3、1.3,输出将是正确的并打印出 3.8 的结果。但是,当我输入三个相同的浮点值时,似乎会出现浮点错误。例如,1.2、1.2、1.2 将打印出 3.5999999999999996。
为什么会出现这种情况?有没有办法可以防止它?
解决方案
它不起作用,因为float
有更多的十进制数字,有关更多信息,请检查:link,因此您应该执行以下操作:
result = 0
for i in range(3):
n = float(input("Enter a value: "))
result = result + n
print('{0:.1f}'.format(result))
输出:
Enter a value: 1.2
Enter a value: 1.2
Enter a value: 1.2
3.6
或者:
result = 0
for i in range(3):
n = float(input("Enter a value: "))
result = result + n
print('%.1f'%result)
输出:
Enter a value: 1.1
Enter a value: 1.1
Enter a value: 1.1
3.3
decimal
模块:
尝试这个:
from decimal import Decimal
result = 0
for i in range(3):
n = Decimal(input("Enter a value: "))
result = result + n
print(result)
输出:
Enter a value: 2.1
Enter a value: 2.1
Enter a value: 2.1
6.3
推荐阅读
- git - 如何做一个“git快退”?
- r - 多列但不是二元选择题的频率表
- python-3.x - csv.DictReader 和 Session.bulk_save_objects?
- java - Java:文件在行尾停止读取并给出错误
- php - Laravel:更新模型的时间戳而不保存其他属性
- flutter - 如何在 Flutter 上从 API Server 制作弹出错误消息?
- powershell - Github Actions 输出文本颜色
- angular - Angular 8 到 Angular 9 的迁移问题
- json - 使用 Powershell 将字符串转换为 JSON 再转换为字符串并再次转换为 JSON
- java - 以 {[]} 格式从泛型类型获取数据