当前位置: 首页 > 面试题库 >

浮点数的Python舍入错误

郑安晏
2023-03-14
问题内容

我不知道这是否是一个明显的错误,但是在运行Python脚本以更改模拟参数时,我意识到缺少delta = 0.29delta = 0.58的结果。在调查中,我注意到以下Python代码:

for i_delta in range(0, 101, 1):
  delta = float(i_delta) / 100

  (...)

filename = 'foo' + str(int(delta * 100)) + '.dat'

生成的相同文件的增量= 0.28和0.29,与.57和.58相同,原因是python返回float(29)/ 100为0.28999999999999998。但这不是系统错误,从某种意义上说,它并不是每个整数都发生的。因此,我创建了以下Python脚本:

import sys

n = int(sys.argv[1])

for i in range(0, n + 1):
  a = int(100 * (float(i) / 100))
  if i != a: print i, a

而且我看不到发生这种舍入错误的数字中的任何模式。为什么这些特定数字会发生这种情况?


问题答案:

不能由精确的2的幂构成的任何数字都不能完全表示为浮点数。它需要被近似。有时最接近的近似值会小于实际数字。



 类似资料:
  • 我有一个关于PostgreSQL 9.2中浮点数的新手问题。 有没有直接舍入浮点数的函数,即不需要先将数字转换为数字类型? 另外,我想知道是否有一个函数可以用任意的度量单位进行取整,例如精确到0.05? 首先将数字转换为十进制形式时,以下查询工作正常: 然而,我真正想要实现的是以下几点: 这当前给了我以下错误: 谢啦

  • 问题内容: 我期望的是0.313而不是0.312,为什么会这样呢?还有其他方法可以用来获得0.313吗? 谢谢 问题答案: Python 3使用舍入到偶数方法根据IEEE 754标准进行舍入。 如果您想采用另一种方式取整,则只需手动实施即可: 用法示例: 注意: 在python2中,舍入总是远离零,而在python3中,它舍入为偶数。(例如,请参见功能文档中的2.7和3.3之间的区别)。

  • 我不明白为什么这是1.0。它不应该是0.999999999999吗?因此,我提出了一种解决方案,python对其答案进行了自动舍入,但如果大于,则无法解释以下结果。。。 我以为四舍五入错误是因为尾数中使用的位数有限,指数(浮点数),但0.9999~~9也没有超出位数的限制...有人能解释一下为什么这些结果会这样吗?

  • 问题内容: 我面临该功能的奇怪行为: 此代码打印: 我希望浮动值总是四舍五入,但是取整到最接近的偶数。 为什么会出现这种行为?获得正确结果的最佳方法是什么? 我尝试使用,但结果是相同的。 问题答案: “ 数字类型” 部分明确记录了此行为: x 四舍五入为n位数字,四舍五入为偶数。如果省略n,则默认为0。 注意 四舍五入到一半 。这也被称为 银行家四舍五入 ; 通过四舍五入到最接近的 偶数, 您可以

  • 问题内容: 有没有办法将python浮点数舍入为x小数?例如: 我已经找到了修剪/截断它们的方法(66.666666666-> 66.6666),但是不是圆形的(66.666666666-> 66.6667)。 问题答案: 使用内置功能: 帮助: round(number [,ndigits])->浮点数 将数字四舍五入到给定的精度(以十进制数字表示)(默认为0位数)。这总是返回一个浮点数。精度可

  • 我试图编写一个round_up函数,将浮点数转换为整数,但是我获取小数位数的方法似乎有错误(浮点数%1的剩余部分)。如果浮点数是4.4,我希望将其转换为4;如果是4.5,我希望将其转换为5。错误消息:错误:无效的操作数到二进制%(有'浮动'和'int')