有两点需要注意:
- 二进制表示小数可能存在精度丢失(这是十进制转二进制的原理决定的,例如0.9乘2取余无穷无尽)
- 计算机遵循四舍六入,五奇进偶舍,即 x.abc,当b=5需要保留一位小数时
1). 若c>0,则a+1
2). 若c=0且a=奇数,则a+1
3). 若c=0且a=偶数,则a不变
故采用两种方法:
方法一
# 该方法适用于小数位精度不高时 var = input() res = int(float(var) + 0.5) # float()字符串转函数(此时高精度已丢失),+0.5代表五入规则,int用于去除小数
方法二
import decimal var = input() res =decimal.Decimal(var).quantize(decimal.Decimal('0'), rounding=decimal.ROUND_HALF_UP))
通用方法
保留小数点后index位
index = 1 # 保留小数点后index位 num = input() res = int(float(num) * pow(10, index) + 0.5) / pow(10, index) print(res)