目前,Python版本中关于保留指定小数位数的常用方法有以下几种:
1. 使用round()内置函数
print(round(1.234, 2))
输入结果为:1.23
round()函数中的第一个变量为需要保留指定位数的小数,第二个变量为指定要保留的位数(如上例保留两位小数。该参数默认为0,即不保留小数,直接近似为整数)。
2. 使用decimal模块
from decimal import Decimal
print(Decimal('1.234').quantize(Decimal("0.00")))
输入结果为:1.23
3. 使用%来格式化字符串输出(Python-小知识汇总6-10的第6.1部分)
print('%.2f' % 1.234)
输入结果为:1.23
4. 使用format方法来格式化字符串输出(Python-小知识汇总6-10的第6.2部分)
print('{:.2f}'.format(1.234))
上述代码同样可以写为:print(format(1.234, '.2f'))
输入结果均为:1.23
但是,上述四种方法在具体应用时,有可能会出现误差,这和浮点数的精度有关。我们知道在机器中浮点数不一定能精确表达,因为换算成一串1和0后可能是无限位数的,机器已经做出了截断处理。参考地址:https://www.cnblogs.com/anpengapple/p/6507271.html
这里的具体原因我们不展开说,通过几个例子来说明上述几种方法出现误差的时候:
可以看出,当约去的小数为5的时候,上述的几种不同的方法均可能会出现误差。不同方法出现误差的原因我们这里不深究。为了准确形成一种能够根据四舍五入来保留小数位的方法,我们可以通过编写以下代码函数来实现。
#代码
def xiaoshufunc(float_a, n): #float_a为原小数,n为要保留的小数位数
string_a = str(float_a)
a, b, c = string_a.partition('.') #此时的a、b和c的类型均为字符串类型
cc = c[:n]
if int(c[n])>=5:
ccc = int(cc)+1
else:
ccc = int(cc)
print('小数'+str(float_a)+'保留'+str(n)+'位小数后的结果为:'+a+b+str(ccc))
xiaoshufunc(1.05,1) #输出结果为1.1
xiaoshufunc(1.15,1) #输出结果为1.2
xiaoshufunc(1.25,1) #输出结果为1.3
xiaoshufunc(1.35,1) #输出结果为1.4