如何将39.54484700000000更改为39.54并使用python
可能重复:如何将39.54484700000000更改为39.54并使用python,python,floating-point,Python,Floating Point,可能重复: 我想使用python将39.54484700000000设置为39.54 如何得到它 谢谢使用round: 返回浮点值x 小数点后四舍五入到n位 指向如果省略n,则默认为 零。结果是一个浮点 号码。 值四舍五入到最接近的值 幂减n的10的倍数; 如果两个倍数相等, 舍入是从0开始的 请注意,由于39.54在我的PC(x86)上不能完全用浮点表示,因此结果是epsilon off。但这没什么区别(这是一个完全不同的问题,有很多问题和答案)。如果您正确地将其转换为字符串,您将看到您期望
我想使用python将
39.54484700000000
设置为39.54
如何得到它
谢谢使用
round
:
返回浮点值x
小数点后四舍五入到n位
指向如果省略n,则默认为
零。结果是一个浮点
号码。
值四舍五入到最接近的值
幂减n的10的倍数;
如果两个倍数相等,
舍入是从0开始的
请注意,由于39.54在我的PC(x86)上不能完全用浮点表示,因此结果是epsilon off。但这没什么区别(这是一个完全不同的问题,有很多问题和答案)。如果您正确地将其转换为字符串,您将看到您期望的结果:
>>> "%.2f" % round(39.544847, 2)
'39.54'
但是,请注意,结果实际上不是39.54,而是39.53999999914734871708787977695465087890625。Eli提到使用round函数——根据您的要求,您可能希望返回十进制对象
>>> from decimal import Decimal
>>> float_val = 39.54484700000000
>>> decimal_val = Decimal("%.2f" % float_val)
>>> print decimal_val
39.54
使用Decimal对象可以指定要跟踪的精确小数位数,从而避免以表示为39.5399999999999
的浮点数结束。具体来说,如果你在做金融计算,你几乎总是被建议远离浮点数
但是,您不能将浮点直接转换为小数(浮点不精确,Python无法猜测您希望它们如何舍入),因此我几乎总是首先将它们转换为舍入的字符串表示形式(这是
“%.2f”%float_val
-%.2f
表示只显示两个小数,然后从中创建一个小数。如果要更改实际值,请按照Eli的建议使用舍入
。但是对于许多值和Python的某些版本,结果不会表示为字符串“39.54”。如果要将其四舍五入以生成一个字符串以显示给用户,则可以执行以下操作:
>>> print "%.2f" % (39.54484700000000)
39.54
或者在较新版本的Python中
>>> print("{:.2f}".format(39.54484700000000))
39.54
或者用F弦
>>> print(f'{39.54484700000000:.2f}')
39.54
相关文档:,如何
round
>>> import decimal
>>> d=decimal.Decimal("39.54484700000000")
>>> round(d,2)
39.54
如果使用的是十进制,则可以使用该方法:
In [24]: q = Decimal('0.00')
In [25]: d = Decimal("115.79341800000000")
In [26]: d.quantize(q)
Out[26]: Decimal("115.79")
但是,我想要一个短数字,而不是长数字。@zjm1126:在什么意义上?你想打印出来吗?然后使用%.2f格式它将显示为十进制(“39.54”),但我不想获取
十进制
@zjm1126:您尝试过打印
吗?打印
应该将十进制对象转换为字符串,其字符串表示形式仅为“39.54”但是我不想得到字符串'39.54',我想得到number
39.54在Python中存储普通数字的方式不能准确地表示值39.54(因为它是一个以10为基数的值,没有有限的以2为基数的表示)。您可以按照其他人的建议使用decimal.decimal类,也可以升级到Python版本,该版本可以将不精确的值转换为所需的字符串(CPython2.7+,IIRC)。首先,感谢您发布指向实际文档的链接。但是,我似乎找不到任何有关“{.2f}”格式的内容(n)
,特别是文档中的:.
语法?文档中的:.
具体是做什么的?您能告诉我文档中涉及这一点的部分吗?您所说的“更改”是什么意思?根据你的问题,我们猜不到。两个都可以是字符串。然后你在做一个字符串切片。两个都可以是浮点,所以你在截断。第一个可以是浮点,第二个字符串,你在格式化。第一个可以是字符串,第二个浮点,在这种情况下,你在转换和舍入。这个问题在f中无法回答请把它修好。
>>> import decimal
>>> d=decimal.Decimal("39.54484700000000")
>>> round(d,2)
39.54
In [24]: q = Decimal('0.00')
In [25]: d = Decimal("115.79341800000000")
In [26]: d.quantize(q)
Out[26]: Decimal("115.79")