使用动态精度将float转换为字符串 - python

时间:2015-11-05 18:02:55

标签: python string python-2.7 precision

我想将浮点值(具有动态精度)转换为字符串 如果浮动值我 a = 10.00 而不是结果 '10 .00' 如果 a = 10.000 ,结果应 '10 .000'

我得到这样的结果

a = 10.00
str(a)
'10.0'

但我想要这样的结果。

a = 10.00
str(a)
'10.00'

有什么办法吗?

3 个答案:

答案 0 :(得分:3)

如果您要保留有效数字,请使用decimal模块。

>>> from decimal import Decimal
>>> num1 = Decimal('10.000')
>>> str(num1)
'10.000'
>>> num2 = Decimal('10.00')
>>> str(num2)
'10.00'

十进制模块支持十进制浮点运算。

>>> num1/5
Decimal('2.000')
>>> num1+22
Decimal('32.000')

答案 1 :(得分:1)

  

我得到a = 10.00,结果应该是'10 .00',如果a = 10.000,结果应该是'10 .000'

     

如果'a = 5.500比str(a)应该是'5.500'如果'a = 10.50而不是str(a)应该是'10 .50'如果'a = 1.050而不是str(a)应该是'1.050'

你要求的是不可能的。不是在Python中,也不是我所知道的任何其他编程语言。如果a是常规浮点数,则10.010.0010.000相同。它们都存储相同并具有相同的精度。

>>> a = 5.500
>>> b = 5.5
>>> c = 5.500000000
>>> a == b == c
True

规避这一点的唯一方法,不是使用float,而是使用其他类型,例如Decimal,如另一个答案所示。

  

让我解释一下我允许用户从命令行输入输入的情况,例如用户输入10.00,我想要小数点后的0,当前金额变为10.0

根据您的上一条评论,您可以从文字输入中获取数字,即str,因此使用decimal应该没问题。但是,如果您只想将这些数字反馈回用户,您甚至不需要:只需打印用户最初输入的字符串。

  

请注意,我只接受来自用户输入的数字(我不想允许字符串输入

您可以获取字符串输入并将该输入转换为数字。问题解决了。

>>> s = raw_input("enter number ")
enter number 10.000
>>> f = float(s)
>>> s
'10.000'
>>> f
10.0

答案 2 :(得分:1)

# way 1
a = 10.00
s = '%.2f' % a
print s # 10.00

# way 2
a = 10.0
p = 2
s = '%.{0}f'.format(p) % a
print s # 10.00