当前位置 博文首页 > python3 实现除法结果为整数

    python3 实现除法结果为整数

    作者:自由的小白 时间:2021-05-09 17:43

    问题描述

    101/100,想要的结果是1,但是算出来的结果是1.01

    解决方案

    101 // 100

    结果图

    补充:python2 与 3:一般除法、除法取整、除法取余、精确减法与精确除法

    python2

    python2除法

    python2的除法,与c语言除法类似,两个整数相除结果一定是整数,除数与被除数有一个是浮点数,结果就是浮点数。因此当两个整数相除,结果又有小数时,由于结果是整数,所以小数部分会被省略,针对这种情况,要实现真正的除法,除数与被除数至少有一个应改为浮点数。(貌似python2.7开始,除法和python3除法一样了,没有仔细考究)

    a = 3
    b = 2
    print a/b
    print float(a)/b
    print a/float(b)
    print float(a)/float(b)
    # 结果
    1
    1.5
    1.5
    1.5
    

    python2除法取整

    加一个int(),进行强制类型转换即可。

    a = 4.5
    b = 3
    print a/b
    print int(a/b)
    # 结果
    1.5
    1
    

    python2除法取余

    利用%操作即可。

    a = 5.5
    b = 3
    print a % b
    # 结果
    2.5
    

    python3

    python3除法

    python3的除法就直接使用"/",就可以了,不存在python2的情况

    a = 3
    b = 2
    print(a/b)
    # 结果
    1.5
    

    python3除法取整

    利用"//"操作
    a = 5.5
    b = 2
    print(a//b)
    # 结果
    2.0
    

    python3除法取余

    利用"%"操作

    a = 5.5
    b = 2
    print(a%b)
    # 结果
    1.5
    

    python3精确减法与精确除法

    我们先看看下面的输出

    a = 0.9
    b = 1
    print(b-a)
    print((b-a)/100)
    print((0.1)/100)
    # 结果
    0.09999999999999998
    0.0009999999999999998
    0.001
    

    python计算要把数字先转为二进制,因为浮点数以二进制形式表示时的有穷性(利用乘K取余法,0.9的二进制无限延展),会导致计算误差。下面摘自python文档原话。

    On most machines today, floats are approximated using a binary fraction with the numerator using the first 53 bits starting with the most significant bit and with the denominator as a power of two.

    这不是只有python才有的bug,也不是你代码的bug,所有的编程语言都会有这个问题,当然可能很多编程语言会使用某些机制来规避这种显示。回到该blog的例子,0.9的二进制表示如下:

    0.1110011001100110011001100110011001100110011001100110011

    1-0.9的二进制表示为:

    0.0001100110011001100110011001100110011001100110011001100

    转化过来就是0.09999999999999998

    这时候为了实现精确运算,可以使用类decimal。

    import decimal
    decimal.getcontext().prec = 10 # 取小数点后精度到第10位
    a = 0.9
    b = 1
    print(decimal.Decimal(b)-decimal.Decimal(a))
    print((decimal.Decimal(b)-decimal.Decimal(a))/100)
    print((0.1)/100)
    # 结果
    0.1000000000
    0.0010000000
    0.001
    

    当然,直接使用近似函数round()也是可以的。

    a = 0.9
    b = 1
    print(round(b-a, 10))
    print(round((b-a)/100, 10))
    print(round((0.1)/100, 10))
    # 结果
    0.1
    0.001
    0.001
    

    以上为个人经验,希望能给大家一个参考,也希望大家多多支持站长博客。如有错误或未考虑完全的地方,望不吝赐教。

    js
    下一篇:没有了