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

python不正确的舍入与浮点数

颜森
2023-03-14
问题内容
>>> a = 0.3135
>>> print("%.3f" % a)
0.314
>>> a = 0.3125
>>> print("%.3f" % a)
0.312
>>>

我期望的是0.313而不是0.312,为什么会这样呢?还有其他方法可以用来获得0.313吗?

谢谢


问题答案:

Python
3使用舍入到偶数方法根据IEEE
754标准进行舍入。

如果您想采用另一种方式取整,则只需手动实施即可:

import math
def my_round(n, ndigits):
    part = n * 10 ** ndigits
    delta = part - int(part)
    # always round "away from 0"
    if delta >= 0.5 or -0.5 < delta <= 0:
        part = math.ceil(part)
    else:
        part = math.floor(part)
    return part / (10 ** ndigits)

用法示例:

In [12]: my_round(0.3125, 3)
Out[12]: 0.313

注意: 在python2中,舍入总是远离零,而在python3中,它舍入为偶数。(例如,请参见round功能文档中的2.7和3.3之间的区别)。



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

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

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

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

  • 问题内容: 我在MySQL中以浮动形式输入“ 35444650.00”,并且将格式重新设置为35444648.00,欢迎任何帮助… 问题答案: 浮点数仅具有一定的精度,您可能会超出浮点数据类型的精度。尝试改为使用DOUBLE。

  • 我发现如果我对一些浮点值使用轮函数,四舍五入到两个小数是可以的,但是有时候,例如,它会返回而不是,但实际上我希望每个返回的值都四舍五入到两个小数,即而不是。我该怎么办?