问题描述
101/100,想要的结果是1,但是算出来的结果是1.01
解决方案
101 // 100
结果图
补充:python2 与 3:一般除法、除法取整、除法取余、精确减法与精确除法
python2
python2除法
python2的除法,与c语言除法类似,两个整数相除结果一定是整数,除数与被除数有一个是浮点数,结果就是浮点数。因此当两个整数相除,结果又有小数时,由于结果是整数,所以小数部分会被省略,针对这种情况,要实现真正的除法,除数与被除数至少有一个应改为浮点数。(貌似python2.7开始,除法和python3除法一样了,没有仔细考究)
1
2
3
4
5
6
7
8
9
10
11
|
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(),进行强制类型转换即可。
1
2
3
4
5
6
7
|
a = 4.5
b = 3
print a / b
print int (a / b)
# 结果
1.5
1
|
python2除法取余
利用%操作即可。
1
2
3
4
5
|
a = 5.5
b = 3
print a % b
# 结果
2.5
|
python3
python3除法
python3的除法就直接使用"/",就可以了,不存在python2的情况
1
2
3
4
5
|
a = 3
b = 2
print (a / b)
# 结果
1.5
|
python3除法取整
1
2
3
4
5
6
|
利用 "//" 操作
a = 5.5
b = 2
print (a / / b)
# 结果
2.0
|
python3除法取余
利用"%"操作
1
2
3
4
5
|
a = 5.5
b = 2
print (a % b)
# 结果
1.5
|
python3精确减法与精确除法
我们先看看下面的输出
1
2
3
4
5
6
7
8
9
|
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的二进制无限延展),会导致计算误差。下面摘自。
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。
1
2
3
4
5
6
7
8
9
10
11
|
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()也是可以的。
1
2
3
4
5
6
7
8
9
|
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
|
以上为个人经验,希望能给大家一个参考,也希望大家多多支持服务器之家。如有错误或未考虑完全的地方,望不吝赐教。
原文链接:https://blog.csdn.net/zzzzlei123123123/article/details/97813082