打印浮点数时如何防止打印功能自动舍入?

时间:2018-03-31 22:14:33

标签: python python-3.x math

让我们考虑一下这种情况:

from math import sqrt

x = sqrt(19) # x : 4.358898943540674

print("{:.4f}".format(x))
# I don't want to get 4.3589
# I want to get 4.3588

print()功能会自动对数字进行舍入,但我不想这样做。我该怎么办?

4 个答案:

答案 0 :(得分:0)

如果您希望将数字向下舍入到小数点后第四位而不是将其四舍五入到最接近的可能性,您可以自己进行舍入。

x = int(x * 10**4) / 10**4
print("{:.4f}".format(x))

这会给你

4.3588

乘以后以10**4除以4位小数位移,int函数向下舍入为整数。将它们结合起来就可以实现你想要的。由于浮点问题,有一些边缘情况会产生意外结果,但这些情况很少见。

答案 1 :(得分:0)

这是一种方法。 truncate函数courtesy of @user648852

from math import sqrt, floor

def truncate(f, n):
    return floor(f * 10 ** n) / 10 ** n

x = sqrt(19) # x : 4.358898943540674

print("{0}".format(truncate(x, 4)))
# 4.3588

答案 2 :(得分:0)

最初做更多工作并删除固定数量的多余数字:

from math import sqrt

x = sqrt(19) # x : 4.358898943540674

print(("{:.9f}".format(x))[:-5])

给出了期望的结果。如果x的格式为?.????999996或类似,但仍然可能会失败,但这些数字的密度相当小。

答案 3 :(得分:0)

基于舍入后的浮点数舍入整数的常见解决方案是在舍入前加0.5。 因此,当您想舍入到小数点后第4位时,在四舍五入前减去.00005即可得出所需的结果。

x = 1.88888
print("{:.4f}".format(x - .00005))

1.8888