round(number[, ndigits])
返回number舍入到小数点后ndigits为精度的值,如果ndigits被省略则会返回最接近输入值的整数
强调:round()的舍入规则不是四舍五入
强调:round()的舍入规则不是四舍五入
强调:round()的舍入规则不是四舍五入
舍入的规则
官方定义:结果值会舍入至最接近的 10 的负 ndigits 次幂的倍数;如果与两个倍数同样接近,则选用偶数。
有点不好理解,换一种理解方式
结果值 = 与number 最接近的拥有ndigits位小数的小数 。如果距离相等,则选择小数点第ndigits位是偶数的小数
round(number)
a = 2.465 # 舍入后 2.46 # 距离2.46和2.47一样近,2.46的末尾小数为偶数,则结果为2.46
b = 2.4651 # 舍入后 2.47 # 距离2.47较近
print(round(a,2))
print(round(b,2))
a = 2.464 # 舍入后 2.46 # 距离2.46最近
b = 2.467 # 舍入后 2.47 # 距离2,47最近
print(round(a,2))
print(round(b,2))
官方文档的例子
对浮点数执行 round() 的行为可能会令人惊讶:例如,round(2.675, 2) 将给出 2.67 而不是期望的 2.68。
这不算是程序错误:这一结果是由于大多数十进制小数实际上都不能以浮点数精确地表示。
因为所有的数据在计算机中都以二进制的形式进行存储,从十进制转化为二进制的过成中,会有精度的损失。
2.675转换成二进制以后在计算机存储的机器数要小于2.675 所以会导致结果和预期值不一样
如果想要精确度比较高的
使用模块 decimal
decimal可以调整小数点位数的进度
format函数转换成字符串,可以指定保留小数位数,保留规则为四舍五入