【问题标题】:Rounding numbers in PythonPython中的舍入数字
【发布时间】:2021-09-15 18:06:20
【问题描述】:
a=0.005
print ('%.2f'%a)
b=90.005
print('%.2f'%b)
c=90.015
print('%.2f'%c)

以上代码是用python3编写的,输出如下:

 0.01
 90.00
 90.02

这是任何类型的计算错误还是 m 遗漏了一点?

【问题讨论】:

标签: python python-3.x


【解决方案1】:

我认为这里的问题是第二个,即

b = 90.005
print('%.2f' % b)

现在正如@divibisan 所说,如果数字在 0-4 之间,则向下舍入,如果在 5-9 之间,则向上舍入。那么为什么90.005 没有四舍五入呢?

因为计算机不能精确地表示浮点数。如果您仔细观察,您会发现90.005 表示为,

>>> print('%.50f' % b)
90.00499999999999545252649113535881042480468750000000

这就是它被四舍五入的原因,而其他行为正常。

>>> print ('%.50f'%a)
0.00500000000000000010408340855860842566471546888351
# 0.01

>>> print ('%.50f'%c)
90.01500000000000056843418860808014869689941406250000
# 90.02

【讨论】:

  • 是的,我明白这一点,那么有什么可能的解决方案,我在HakerRank多次遇到这个问题
  • 您需要将它们转换为整数,进行计算,然后再转换为浮点数。
  • OK,表示没有有效的解决方案。
  • @ShivendraSaxena 来自文档:对于需要精确十进制表示的用例,请尝试使用实现适用于会计应用程序和高精度应用程序的十进制算法的十进制模块。
  • 你能提供我那个文档的参考链接吗
猜你喜欢
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
  • 2012-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多