Tyche_BO
2020-08-20 11:25
采纳率: 84.6%
浏览 242

python明明可以整除的数,缺出现了小数点的数值。

本来想用python 的math.ceil()来做小数点取整,但发现有时候明明可以整除的数,但计算出来会出现小数点,导致出结果异常。麻烦大佬来解析下原因 和解决方法 ,谢谢

    a = math.ceil((0.55-0.1)/0.03)
    b = ((0.55-0.1)/0.03)
    print(a) # # output: 16   (正常输出应该是15)
    print(b) # output: 15.000000000000004
    print(0.45/0.03) # output: 15.000000000000002

  • 点赞
  • 写回答
  • 关注问题
  • 收藏
  • 邀请回答

4条回答 默认 最新

  • soar3033 2020-08-20 12:13
    已采纳

    这是因为浮点数实际上是用二的幂数和小数逼近的,实际上浮点数是有精度的,难免的有很小的误差。要是想避免这个问题,可以对数据的小数点位数做限制。
    可以改成:

    a = math.ceil(round((0.55-0.1)/0.03,4))
    

    从而忽略掉精度导致的尾数。

    点赞 打赏 评论
  • 浴火_凤凰 2020-08-20 13:08

    可能是因为 是浮点数的计算吧
    浮点数 除以 浮点数 结果还是浮点数 能整除 也是浮点数

    点赞 打赏 评论
  • dabocaiqq 2020-08-20 13:52

    浮点数存在精度误差
    https://www.cnblogs.com/luhuan/p/11161172.html
    0.1在十进制中是有限的,但是二进制里是无限循环小数
    好比1/3=0.1(三进制),但是在10进制无法精确表示一样的道理。

    点赞 打赏 评论
  • 吃鸡王者 2020-08-20 15:08

    这是因计算机使用二进制来处理浮点数的时候会有误差,你可以使用decimal模块来实精确计算
    图片说明

    点赞 打赏 评论

相关推荐 更多相似问题