如何获取与输入数字相同的字符串?
>>> '{: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”
答案 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