• 技术文章 >Python技术 >Python基础教程

    python里保留小数时5为什么舍去

    流芳流芳2020-07-08 09:45:02转载2300

    python里保留小数时5舍去的原因是:round函数在遇到“.5”的情况时,如果要取舍的位数前的小数是奇数,则直接舍弃,如果是偶数则向上取舍。

    round( )函数简介

    菜鸟教程中介绍到,round() 函数作用就是,返回浮点数x的四舍五入值。

    > round( x [, n] )

    参数x,n均为数值表达式,返回值为x的四舍五入值。n为保留的小数位数,不加n则只保留x四舍五入后的整数部分。

    >>> round(2.3)
    2
    >>> round(2.45, 1)
    2.5

    特殊情况

    上面的结果并没有错误,这里再用2.675测试一下:

    >>> round(2.675, 2)
    2.67

    显然结果不符合四舍五入的规则。为什么会这样呢?原因是:round()函数只有一个参数,不指定位数的时候,返回一个整数,而且是最靠近的整数,类似于四舍五入,当指定取舍的小数点位数的时候,一般情况也是使用四舍五入的规则,但是碰到.5的情况时,如果要取舍的位数前的小数是奇数,则直接舍弃,如果是偶数则向上取舍。

    小数位的四舍五入在项目中经常用到,今天群里有人提出1.325 如何才能变成1.33?

    当时我一看这么简单,分秒就可以解决:

    我回复是这样的的

    round(1.315,2)

    有个小伙伴 当时就回复:

    他要的结果是 1.32, 你打印出是1.31,我看到我想怎么可能呢,我自己运行下,

    结果真是1.31 .

    我想都没有想,自认为我是对的,好吧,怪不得开发不能测试自己的代码.

    我就开始查找原因,我们通过代码进行讲解:

    print(Decimal(1.325))

    打印结果:

    1.3249999999999999555910790149937383830547332763671875

    大家看到了吗? 实际1.325用二进制转化的是有精度损失.部分小数无法完全用二进制表示.
    这是根本所在.

    那有的同学该说了,为什么 有的五能进1 能解释下原理吗?
    原理和上边的一样,我举个例子 5可以进1

    print(round(1.145,2))
    #打印结果
    1.15

    继续查看二进制保存的值:

    print(Decimal(1.145))
    #打印结果
    1.145000000000000017763568394002504646778106689453125

    大家明白了吧 ,round 本身没有问题,而是二进制保存的值有点误差导致的.

    推荐课程:机器学习边学变练(黑马程序员)

    专题推荐:python四舍五入
    品易云
    上一篇:python静态方法怎么调用 下一篇:python字符串前面加r是为什么

    相关文章推荐

    • 如何用python查看进程• python中怎么取绝对值• python不可变类型详解• python静态方法怎么调用

    全部评论我要评论

    © 2021 Python学习网 苏ICP备2021003149号-1

  • 取消发布评论
  • 

    Python学习网