这是我的代码:

x = 1.0
y = 100000.0    
print x/y

我的商显示为1.00000e-05。

有没有办法压制科学符号,让它显示为 0.00001 ?我将使用结果作为字符串。


当前回答

您可以使用内置的格式化功能。

>>> a = -3.42142141234123e-15
>>> format(a, 'f')
'-0.000000'
>>> format(a, '.50f') # Or you can specify precision
'-0.00000000000000342142141234122994048466990874926279'

其他回答

使用3.6.4时,我遇到了一个类似的问题,当使用这个时,输出文件中的一个数字将被科学符号格式化:

fout.write('someFloats: {0:0.8},{1:0.8},{2:0.8}'.format(someFloat[0], someFloat[1], someFloat[2]))

我所要做的就是添加'f'来修复它:

fout.write('someFloats: {0:0.8f},{1:0.8f},{2:0.8f}'.format(someFloat[0], someFloat[1], someFloat[2]))

将浮点数显示为任意数量的有效数字的更简单解决方案。这里不需要numpy或列表推导式:

def sig(num, digits=3):
    "Return number formatted for significant digits"
    if num == 0:
        return 0
    negative = '-' if num < 0 else ''
    num = abs(float(num))
    power = math.log(num, 10)
    if num < 1:
        step = int(10**(-int(power) + digits) * num)
        return negative + '0.' + '0' * -int(power) + str(int(step)).rstrip('0')
    elif power < digits - 1:
        return negative + ('{0:.' + str(digits) + 'g}').format(num)
    else:
        return negative + str(int(num))

在示例中,我去掉了后面的0并显示完整的整数:sig(31415.9) = 31415而不是31400。如果您不喜欢修改代码,请随意修改。

测试:

for power in range(-8,8):
    num = math.pi * 10**power
    print(str(num).ljust(25), sig(num))

另一种选择是,如果你正在使用熊猫,并且想要压制所有浮点数的科学计数法,是调整熊猫选项。

import pandas as pd
pd.options.display.float_format = '{:.2f}'.format

您可以使用内置的格式化功能。

>>> a = -3.42142141234123e-15
>>> format(a, 'f')
'-0.000000'
>>> format(a, '.50f') # Or you can specify precision
'-0.00000000000000342142141234122994048466990874926279'

上面的大多数答案都要求您指定精度。但是如果你想像这样显示浮点数,没有不必要的零呢:

1
0.1
0.01
0.001
0.0001
0.00001
0.000001
0.000000000001

Numpy给出了答案:np.format_float_positional

import numpy as np

def format_float(num):
    return np.format_float_positional(num, trim='-')