如何将以e+##结尾的长数字展开显示?

5 投票
2 回答
10688 浏览
提问于 2025-04-18 08:08

这可能是个简单的问题,但我在任何地方都找不到答案。

举个例子,我有一个简单的程序,我想把a除以b,像这样:

def main():
    a = 12345678900000000
    b = 1.25

    answer = (a / b)
    print(answer)
main()

这个例子会得到9.87654312e+15这样的结果。请问我怎么才能让Python不简化我的数字,而是直接给我一个整数呢?

提前谢谢你,如果这个问题太基础了,我很抱歉。如果我能在谷歌上找到答案,我就不会问了。

2 个回答

1

只需要更具体地说明一下浮点数格式就可以了。

>>> print answer
9.87654312e+15
>>> print "%.20f" % answer
9876543120000000.00000000000000000000
6

你看到的是浮点数的默认 str() 转换效果。你可以通过明确格式化数字来选择不同的转换方式。

format() 函数 可以帮你做到这一点:

>>> n = 9.87654312e+15
>>> format(n, 'f')
'9876543120000000.000000'

想了解更多选项,可以查看 格式规范小语言 的文档。'f' 格式只是其中的一种:

固定点数。将数字显示为固定小数点数。默认精度是6。

默认的精度会导致小数点后有 .000000 六位数字;你可以通过使用 .<精度>f 来改变这个精度:

>>> format(n, '.1f')
'9876543120000000.0'

但要注意,小数会被四舍五入以适应请求的精度。

g 格式会根据数字的大小在使用指数形式(e)和 f 形式之间切换,如果数字是整数,它不会显示小数;你可以使用非常大的精度与 'g' 来完全避免打印小数:

>>> format(n, '.53g')
'9876543120000000'

具体来说,str(n)format(n, '.12g') 是一样的,repr(n) 则是 format(n, '.17g');当指数大于精度时,两者都可以使用指数格式。

撰写回答