我怎样才能得到一个非科学计数法的大数字?

Posted

技术标签:

【中文标题】我怎样才能得到一个非科学计数法的大数字?【英文标题】:How can I get a big number in non-scientific notation? 【发布时间】:2015-01-24 09:31:15 【问题描述】:

我刚试过

>>> 2.17 * 10**27
2.17e+27
>>> str(2.17 * 10**27)
'2.17e+27'
>>> "%i" % 2.17 * 10**27
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: cannot fit 'long' into an index-sized integer
>>> "%f" % 2.17 * 10**27
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: cannot fit 'long' into an index-sized integer
>>> "%l" % 2.17 * 10**27
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: incomplete format

现在我的想法已经用完了。我想得到

2170000000000000000000000000

如何打印这么大的数字? (我不在乎它是 Python 2.7+ 解决方案还是 Python 3.X 解决方案)

【问题讨论】:

【参考方案1】:

您的运算符优先级错误。您正在格式化 2.17,然后将其乘以一个长整数:

>>> r = "%f" % 2.17
>>> r
'2.170000'
>>> r * 10 ** 27
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
OverflowError: cannot fit 'long' into an index-sized integer

在乘法两边加上括号:

>>> "%f" % (2.17 * 10**27)
'2169999999999999971109634048.000000'

这是重载模数运算符以进行字符串格式化的缺点之一; str.format() method 使用的较新的Format String syntax 和它使用的Format Specification Mini-Language(并且可以与format() function 一起使用)巧妙地绕过了这个问题。对于这种情况,我会使用format()

>>> format(2.17 * 10**27, 'f')
'2169999999999999971109634048.000000'

【讨论】:

叹息 谢谢。现在我读了你的答案,这是显而易见的。感谢您提供这么多细节!

以上是关于我怎样才能得到一个非科学计数法的大数字?的主要内容,如果未能解决你的问题,请参考以下文章

Java - 以科学计数法格式化数字

将字符串格式化为科学计数法

科学记数法数字的正则表达式?

科学计数法表示的数字类型转换为非科学计数法String

excel中怎样快速将科学计数变为正常数字

CSV文件保存数字为文本形式后再次打开后数字任然显示为科学计数法的问题?