在C/C++语言对于整形数执行除法会进行地板除(舍去小数部分)。例如 int a=15/10; a的结果为1。
同样的在Java中也是如此,所以两个int型的数据相除需要返回一个浮点型数据的时候就需要强制类型转换,例如 float a = (float)b/c ,其中b、c都是int型数据。
Python中分为3种除法:传统除法、精确除法、地板除。
传统除法
如果是整数除法则执行地板除,如果是浮点数除法则执行精确除法
>>>1/2
0
>>>1.0/2.0
0.5
精确除法
除法总是会返回真实的商,不管操作数是整形还是浮点型。执行from future import division 指令就可以做到这一点。
# -*- coding: UTF-8 -*-
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
>>>1/2
0.5
>>>1.0/2.0
0.5
地板除
从Python2.2开始,增加了一个操作符 // ,以执行地板除://除法不管操作数为何种数值类型,总是会舍去小数部分,返回数字序列中比真正的商小的最接近的数字。
>>>1//2
0
>>>1.0//2
0
>>>-1//2.0
-1
内建函数divmod()
divmod (a,b),返回(a//b,a%b)
>>>divmod(1,2)
(0,1)
>>>divmod(3.14159,1.5)
(2.0,0.4159000000000002)
>>>5+6j//3+2j
2+0j
>>>5+6j%3+2j
-1+2j
>>>divmod(5+6j,3+2j)
((2+0j),(-1+2j))
保留两位小数
In [1]: a = 5.026
In [2]: b = 5.000
In [3]: round(a,2)
Out[3]: 5.03
In [4]: round(b,2)
Out[4]: 5.0
In [5]: '%.2f' % a
Out[5]: '5.03'
In [6]: '%.2f' % b
Out[6]: '5.00'
In [7]: float('%.2f' % a)
Out[7]: 5.03
In [8]: float('%.2f' % b)
Out[8]: 5.0
In [9]: from decimal import Decimal
In [10]: Decimal('5.026').quantize(Decimal('0.00'))
Out[10]: Decimal('5.03')
In [11]: Decimal('5.000').quantize(Decimal('0.00'))
Out[11]: Decimal('5.00')
当需要输出的结果要求有两位小数的时候,字符串形式的:’%.2f’ % a 方式最好,其次用Decimal
round(a,2)
'%.2f' % a
Decimal('5.000').quantize(Decimal('0.00'))
a = 1
b = 3
print(a/b)
#方法一:
print(round(a/b,2))
#方法二:
print(format(float(a)/float(b),'.2f'))
#方法三:
print ('%.2f' %(a/b))
参考文献