我是靠谱客的博主 无聊世界,最近开发中收集的这篇文章主要介绍python2 与 3:一般除法、除法取整、除法取余、精确减法与精确除法python2python3,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

  • python2
    • python2除法
    • python2除法取整
    • python2除法取余
  • python3
    • python3除法
    • python3除法取整
    • python3除法取余
    • python3精确减法与精确除法

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 0.1110011001100110011001100110011001100110011001100110011 0.11100110011001100110011001100110011001100110011001100111-0.9的二进制表示为: 0.0001100110011001100110011001100110011001100110011001100 0.0001100110011001100110011001100110011001100110011001100 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

最后

以上就是无聊世界为你收集整理的python2 与 3:一般除法、除法取整、除法取余、精确减法与精确除法python2python3的全部内容,希望文章能够帮你解决python2 与 3:一般除法、除法取整、除法取余、精确减法与精确除法python2python3所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(41)

评论列表共有 0 条评论

立即
投稿
返回
顶部