python数值截断问题多产生在除法中,而且2.x和3.x对除法的处理不尽相同,在此简单总结。
cpp中,/为简单截断除
printf("%f\n",double(11/3));
printf("%f\n",double(11.0/-3));
printf("%f\n",double(11/-3));
printf("%f\n",double(11.0/-3));
输出:
3.000000
-3.666667
-3.000000
-3.666667
python中,//为floor除
# coding=utf-8
__author__ = 'baodong'
print(11/3)
print(11.0/3)
print(11/-3)
print(11.0/-3)
print('-----')
print(11//3)
print(11.0//3)
print(11//-3)
print(11.0//-3)
2.x,真实除再floor,根据两个除数类型返回结果:
3
3.66666666667
-4
-3.66666666667
-----
3
3.0
-4
-4.0
3.x除法就是真实除:
3.6666666666666665
3.6666666666666665
-3.6666666666666665
-3.6666666666666665
-----
3
3.0
-4
-4.0
so,python里除法都不是默认简单截断的。
特别需要截断,用math包。或者int()方法。【兼容
#截断
import math
math.trunc(-3.6) #-3
math.trunc(3.6) #3
int(-3.6) # -3
int(3.6) # 3
# 四舍五入,兼容
round(3.6) # 4.0
round(3.3) # 3.0
round(-3.6) # -4.0
round(-3.3) # -3.0