我们在刷题的时候常常会遇到浮点型的运算,通常要求我们把结果四舍五入并规定保留几位小数。
首先想到的就是python的内置函数round()
a = float(input())
print(round(a,2))
看似以上代码实现了对输入的数四舍五入保留两位小数,但这里的“四舍五入”并不是真正的四舍五入,由于计算机存储的是二进制,所以使用round做十进制的四舍五入会有一定的影响。
如上图,当输入5.555时,输出的结果并不是我们想要的5.56
因此,想实现真正的四舍五入,我们可以采用以下方法,还是以保留两位小数为例。
a = float(input())
a = int(a*100+0.5)/100
print("{:.2f}".format(a))
但是这个方法也有一定的局限性
如上图,对于负数,还是没有实现四舍五入。
所以我们还得对他进行一个分类讨论,当输入负数时,把+0.5改为-0.5
a = float(input())
if a>=0:
a = int(a*100+0.5)/100
else:
a = int(a*100-0.5)/100
print("{:.2f}".format(a))
最后的格式化输出可以控制小数点后的位数,当位数不足的时候自动补0,这里介绍另一种写法,采用了f字符串。
print(f"{a:.2f}")
由于round()函数在计算十进制四舍五入的时候容易出现错误,我们采用了一种数学方法。如果要保留n位小数,就先乘10^n再+或-0.5(正数就是+,负数就是-),然后套上int()再除100,最后用格式化输出"{:.nf}"