Python十进制到字符串

gfr*_*ng4 37 python string decimal

这里有很多主题可以解释如何将字符串转换为小数,但是如何将小数转换回字符串?

就像我这样做:

import decimal
dec = decimal.Decimal('10.0')
Run Code Online (Sandbox Code Playgroud)

我怎么拿出dec'10.0'(一根绳子)?

Gar*_*tty 51

使用str()内置的,其中:

返回包含对象的可打印表示的字符串.

例如:

>>> import decimal
>>> dec = decimal.Decimal('10.0')
>>> str(dec)
'10.0'
Run Code Online (Sandbox Code Playgroud)

  • +1重要的是要注意`str()`适用于Python中的几乎任何东西. (5认同)
  • 这有点正确,对于像'0.0000000000000123123`这样的十进制字符串会失败,并会打印出`1.23123E-14`.@Matthew使用字符串格式函数正确(下面的答案). (4认同)
  • @SaikiranYerram而是取决于您是否认为它是数字的合理表示。尚不清楚OP中的用例是什么,但实际上,如果用户不希望使用该表示法,则字符串格式化方法会产生更好的结果。 (2认同)

Mat*_*rts 28

使用字符串格式函数:

>>> from decimal import Decimal
>>> d = Decimal("0.0000000000000123123")
>>> s = '{0:f}'.format(d)
>>> print(s)
0.0000000000000123123
Run Code Online (Sandbox Code Playgroud)

如果您只是将数字类型转换为字符串,则它将不适用于指数:

>>> str(d)
'1.23123E-14' 
Run Code Online (Sandbox Code Playgroud)

  • 我没有发现输出中的 E 符号有任何问题。 (2认同)
  • @eraoul 两者都是有效的,取决于用例(例如,您可能需要将值发送到外部 API,该 API 不接受 E 表示法中的值)。如果只是为了打印/记录,那么我想这是一个偏好问题。 (2认同)

Rya*_*yan 5

请注意,使用%f字符串格式似乎首先转换为浮点数(或仅输出有限数量的小数位),因此会降低精度。您应该使用%sstr()来显示存储在十进制中的完整值。

鉴于:

from decimal import Decimal
foo = Decimal("23380.06198573179271708683473")
print("{0:f}".format(foo))
print("%s" % foo)
print("%f" % foo)
Run Code Online (Sandbox Code Playgroud)

输出:

23380.06198573179271708683473
23380.06198573179271708683473
23380.061986
Run Code Online (Sandbox Code Playgroud)

(ed:更新以反映@Mark 的评论。)

  • 您认为应该避免基于“%f”的格式是正确的,但我没有看到任何推荐该方法的答案。请注意,`format(foo, 'f')` 或 `"{0:f}".format(foo)` *不会* 将 `foo` 转换为 `float` 或丢失精度。 (4认同)