设置python格式时,十进制数字将被舍入

设置python格式时,十进制数字将被舍入,python,format,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

以下是我尝试过的:

>>> 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显示了这两个链接:



但这些不是我要找的。

您可以简单地去掉最后一个字符:

pi = 3.14159

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

您可以简单地去掉最后一个字符:

pi = 3.14159

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

format(pi,.4f')有
3.1416
format(pi,.3f')也有
3.142
-格式化输出中所需位数后的下一位数字至少是五位-向上舍入。

format(pi,.4f')有
3.1416
出于同样的原因,
格式(pi,.3f')也有
3.142
-格式化输出中所需位数之后的下一位数字至少是五位-它是四舍五入的。

这是因为它是
四舍五入的,所以它与
四舍五入的功能类似

要解决此问题,请执行以下操作:

>>> 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

这是因为它是
round
ing,所以它就像
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

我不确定您想要什么样的建议,但这里有一种方法可以将数字截断为给定的小数位数:

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

我不确定您想要什么样的建议,但这里有一种方法可以将数字截断为给定的小数位数:

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

你可以试试这个。可能是准确列出答案,有点紧凑

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

希望这会有所帮助。

您可以试试这个。可能是准确列出答案,有点紧凑

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

希望这会有所帮助。

为什么
3.1416
是有关的,但是
3.142
很好?@user2357112可能是我忽略了这一部分。但最令人担忧的是小数点后4位的值。英雄联盟可能是我忘了提它。建议怎么对你做什么?你为什么不想让它朝着正确的方向旋转<代码>十进制
模块有一个
setcontext(向下舍入)
可能有用。显然,您必须将数字转换为十进制对象。@NChauhan可能会有所帮助,但在我的情况下,我想要正确的十进制。这就是为什么我要问这个问题。否则一切都很好,对吧?为什么
3.1416
会有问题,但
3.142
很好?@user2357112我可能忽略了那部分。但最令人担忧的是小数点后4位的值。英雄联盟可能是我忘了提它。建议怎么对你做什么?你为什么不想让它朝着正确的方向旋转<代码>十进制
模块有一个
setcontext(向下舍入)
可能有用。显然,您必须将数字转换为十进制对象。@NChauhan可能会有所帮助,但在我的情况下,我想要正确的十进制。这就是为什么我要问这个问题。否则一切都很好,对吗?但随后
3.141599
仍以
3.1416
的形式打印。但随后
3.141599
仍以
3.1416
的形式打印。这不是我所期望的。我已经知道我的价值观正在被取整。那么你到底期望什么呢?如果你只是想删除所需位置后的所有数字,那么请将@U9 Forward的答案标记为正确。这不是我所期望的。我已经知道我的价值观正在被取整。那么你到底期望什么呢?如果您只想删除所需位置后的所有数字,请将@U9 Forward的答案标记为正确。