格式化python时小数取整

时间:2019-05-29 09:11:53

标签: python format

这是我尝试过的:

>>> pi = 3.14159265
>>> format(pi, '.3f') #print 3.142 # 3 precision after the decimal point
'3.142'
>>> format(pi, '.1f') #print 3.1
'3.1'
>>> format(pi, '.10f') #print 3.1415926500, more precision than the original
'3.1415926500'
>>> format(pi, '.5f') #print 3.14159, more precision than the original
'3.14159'
>>> format(pi, '.4f') 
'3.1416'

关注的部分是这样:

>>> format(pi, '.3f') #print 3.142 # 3 precision after the decimal point
'3.142'
>>> format(pi, '.4f') 
'3.1416'

我期望有3.1415的地方得到3.1416。请给我建议。
SO显示了这两个链接:
http://stackoverflow.com/questions/21895756/why-are-floating-point-numbers-inaccurate
http://stackoverflow.com/questions/1089018/why-cant-decimal-numbers-be-represented-exactly-in-binary
但是这些不是我想要的。

5 个答案:

答案 0 :(得分:4)

这是因为它round正在使用它,所以它就像round函数一样。

要修复它:

>>> l = str(pi).split('.')
>>> l[0] + '.' + l[1][:4]
'3.1415'
>>> float(l[0] + '.' + l[1][:4])
3.1415

它的功能版本:

def first_n(a, b):
    l = str(a).split('.')
    return int(l[0] + '.' + l[1][:b])

现在:

print(first_n(pi, 4))

礼物:

3.1415

答案 1 :(得分:1)

您可以简单地删除最后一个字符:

pi = 3.14159

print(format(pi, '.5f')[:-1]) # 3.1415

答案 2 :(得分:1)

我不确定您想要哪种建议,但这是一种将数字截断为给定小数位数的方法:

pi = 3.14159265

def truncate(v, places):
    return int(v * 10**places) / 10**places

print(truncate(pi, 3))  # -> 3.141
print(truncate(pi, 4))  # -> 3.1415

答案 3 :(得分:1)

您可以尝试一下。可能只是列出答案@U9-Forward,有点紧凑。

>>> str(pi)[:6]
'3.1415'

希望这会有所帮助。

答案 4 :(得分:0)

3.1416中有format(pi, '.4f'),其原因相同,3.142中有format(pi, '.3f')-格式化输出中所需位数之后的下一位至少为5 -四舍五入。