nightcomein 2023-02-25 11:43 采纳率: 75%
浏览 73
已结题

最新版的python浮点数,四舍六入问题

进位问题,看了很多文章,有说python里是四舍六入,然后如果最后位数字是5,5后有有效数字则进位。这部分实验了下是对的。但是如果5后面没有有效数字,是舍是进,众说纷纭。有说5前是奇数舍,偶数进,等等。
我自己测试了一下,并不是这么简单。以下是我的测试(保留2位小数):
1.115 1.11 1.115 1.11 1.615 1.61 1.715 1.72
1.215 1.22 1.125 1.12 1.625 1.62 1.725 1.73
1.315 1.31 1.135 1.14 1.635 1.64 1.735 1.74
1.415 1.42 1.145 1.15 1.645 1.65 1.745 1.75
1.515 1.51 1.155 1.16 1.655 1.66 1.755 1.75
1.615 1.61 1.165 1.17 1.665 1.67 1.765 1.76
1.715 1.72 1.175 1.18 1.675 1.68
1.815 1.81 1.685 1.69
1.915 1.92 1.695 1.70

请教下各位,看一下,这个进位的规则到底是怎么样的?

  • 写回答

7条回答 默认 最新

  • X-道至简 2023-02-26 15:35
    关注

    这种后面只有5的有这种结果正常,因为浮点数本身就是不精确存储的,看下面的代码就清楚了
    如果要解决这个问题要么自己这样判断一下,要么看有没有什么库可以用的
    可以去研究一下浮点数的存储结构

    a1=1.110
    a11 = 1.115
    print(a11-a1)
    print('1.115 %.2f\n' % (a11))
    
    a2=1.210
    a22 = 1.215
    print(a22-a2)
    print('1.215 %.2f\n' % (a22))
    
    a3 = 1.310
    a33 = 1.315
    print(a33-a3)
    print('1.315 %.2f\n' % (a33))
    
    a4 = 1.410
    a44 = 1.415
    print(a44-a4)
    
    运行结果是这样的,说明没有进1的是存储本身没有到达50.004999999999999893
    1.115 1.11
    
    0.0050000000000001155
    1.215 1.22
    
    0.004999999999999893
    1.315 1.31
    
    0.0050000000000001155
    1.415 1.42
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(6条)

报告相同问题?

问题事件

  • 系统已结题 3月8日
  • 已采纳回答 2月28日
  • 赞助了问题酬金15元 2月25日
  • 创建了问题 2月25日