使用字符串格式设置数字格式,但不要更改值

时间:2019-06-04 11:04:57

标签: python

如何获取与输入数字相同的字符串?

>>> '{:f}'.format(1559628846)
'1559628846.000000'

期望1559628846

>>> '{:}'.format(1559628846.0001234)
'1559628846.0001235'

期望1559628846.0001234

>>> '{:}'.format(0.000001)
'1e-06'

预期0.000001

我真正的问题是如何在不更改数字的情况下连接字符串和任何数字?

>>> '{},{}'.format('Hi', 1559628846.0001234)
'Hi,1559628846.0001235'

期望“嗨,1559628846.000123”

2 个答案:

答案 0 :(得分:1)

浮点数显示在以10为基数的屏幕上,但存储在以2为基数的计算机上。并非始终精确表示计算机正在使用的以2为基数的数字。 docs.python.org上有一篇很棒的文章。

这说明了舍入错误。至于为什么python不记得您使用的确切数字位数,这是因为存储浮点数比存储您开始使用的字符串更有效。运行此测试以查看区别:

>>> import sys
>>> fnum = 12345.67890
>>> snum = '12345.67890'
>>> sys.getsizeof(fnum)
16
>>> sys.getsizeof(snum)
36
>>>

在编程中,您几乎不需要关心数字的输入方式,只需存储浮点表示形式,并使显示层向用户显示取决于您的用例的令人愉悦的表示形式。如果您真的关心最初输入的内容,则必须将其存储为字符串,而不是浮点数。

答案 1 :(得分:0)

您需要将输入数字定义为字符串。例如:

print('{},{}'.format('Hi','1559628846.0001234'))

输出:Hi,1559628846.0001234

否则,它将始终近似。

另一种选择是将其四舍五入到某个位数,而不是准确性的顺序:

i = round(1559628846.0001234, 5)
print('{},{}'.format('Hi',i))

输出:Hi,1559628846.00012