当前位置: 首页 > 知识库问答 >
问题:

Python中非奇数的舍入错误?[副本]

晋功
2023-03-14

我是Python的初学者,我有一个问题。
为什么舍入像5.5、7.5、(anyther).5这样的数字用奇数部分应用round(num)是正确的(规则5/4),但是用相同的函数舍入像(anyther).5这样的数字用非奇数部分只返回一个整数部分?(但是如果我们在这个十进制数字上加上一个小数字,比如0.00000000001,它就能正常工作了)

我是说下一个:

round(9.5)

返回10,它是正确的。但是

round(8.5)
round(8.5 + 0.0000000000001)

共有1个答案

陆野
2023-03-14

与Python 2.x不同,Python 3.x在round()函数中使用banker舍入。

这是记录在案的行为:

[I]如果两个倍数相等接近,则向偶数选择进行舍入(例如,round(0.5)和round(-0.5)都是0,而round(1.5)是2)。

def my_round(x):
    return int(x + math.copysign(0.5, x))
 类似资料:
  • 问题内容: 我是Python的初学者,我有一个问题。 为什么用奇数整数部分四舍五入像5.5、7.5((任何).5)这样的数字正确工作(规则5/4),但是用同一个函数将非奇数整数部分像(任何).5进行四舍五入只返回整数部分?(但是,如果我们在该十进制数上加上一个像0.000000001这样的小数字,它将正常工作) 我的意思是下一个: 返回10,这是正确的。但 返回8,这是不正确的。和 返回9。 为什

  • 问题内容: 我不知道这是否是一个明显的错误,但是在运行Python脚本以更改模拟参数时,我意识到缺少和的结果。在调查中,我注意到以下Python代码: 生成的相同文件的增量= 0.28和0.29,与.57和.58相同,原因是python返回float(29)/ 100为。但这不是系统错误,从某种意义上说,它并不是每个整数都发生的。因此,我创建了以下Python脚本: 而且我看不到发生这种舍入错误的

  • 问题内容: 这个问题更多是出于好奇。 我正在创建以下数组: 然后,打印它: 但是,如果删除j,则会得到: 但是,如果我从for中删除j,则会得到: 是因为我使用0.6创建矩阵的方式吗?它如何代表内部真实价值? 问题答案: 这里发生了一些不同的事情。 首先,Python有两种将对象转换为字符串的机制,称为和。 应该提供“忠实”的输出,从而(理想情况下)可以轻松轻松地精确地重新创建该对象,同时旨在提供

  • 问题内容: 我知道在浮点算法中会发生舍入错误,但是有人可以解释这一原因: 这在x64上的Python 2和Python 3上都发生。 就我所见,这要么是错误,要么是非常愚蠢的规范,因为我看不出最后一个表达式的求值理由。 为什么不简单定义为? 编辑 :也计算为。至少这是必然的,因为然后评估为 编辑 :这不是浮点数学运算符被破坏吗?因为我在问为什么这个特定的运算会受到(可能是可以避免的)舍入错误,为什

  • 问题内容: 在我的课程中,我被告知: 连续值大约在内存中表示,因此使用浮点数进行计算会产生舍入误差。这些是位模式的微小差异。因此,如果和为浮点,则测试是不安全的。 指的是Java。 这是真的?我已经将比较语句与s和s一起使用,并且从未遇到过舍入问题。我从来没有读过类似的教科书。虚拟机肯定占了这一切吗? 问题答案: 是真的。 这是如何在内存中以有限数量的位表示浮点值的固有限制。 例如,该程序显示“

  • 问题内容: 我遇到了(我怀疑是)舍入错误。 我有一个字符串,我正尝试将其转换为双精度型。我已经可以使用函数将其拆分,并且可以很好地捕获基数和指数值。但是,一旦我尝试将它们适当地相乘,就会得到以下结果:。 这是我的相关代码: 那么,如何避免舍入错误?(我有多种方法可以解决此问题,但如果有可能,那么我想知道如何解决该问题) 谢谢。 问题答案: 您不需要拆分它,可以很好地处理这些数字。 看到?有用!