如何在Python中抑制科学记数法?

Mat*_*att 124 python floating-point

这是我的代码:

x = 1.0
y = 100000.0    
print x/y
Run Code Online (Sandbox Code Playgroud)

我的商显示为 1.00000e-05

有没有办法压制科学记数并使其显示为 0.00001?我将把结果用作字符串.

Azi*_*lto 67

使用较新的版本''.format(还要记住在.您希望显示之后指定多少位数,这取决于浮点数的小数).看这个例子:

>>> a = -7.1855143557448603e-17
>>> '{:f}'.format(a)
'-0.000000'
Run Code Online (Sandbox Code Playgroud)

如上图所示,默认为6位数!这对我们的案例没有帮助,所以我们可以使用这样的东西:

>>> '{:.20f}'.format(a)
'-0.00000000000000007186'
Run Code Online (Sandbox Code Playgroud)

更新

从Python 3.6开始,可以使用新格式化的字符串文字简化,如下所示:

>>> f'{a:.20f}'
'-0.00000000000000007186'
Run Code Online (Sandbox Code Playgroud)

  • 但如何在指定有效数字的同时做到这一点? (3认同)
  • 我想通过使用一个变量,给它所需的位数,并使用它而不是文字数字,例如 `f"{a:.{ precision}f}"` (3认同)
  • 你怎么知道“精度”使用什么值? (2认同)

Sil*_*ost 54

'%f' % (x/y)
Run Code Online (Sandbox Code Playgroud)

但你需要自己管理精度.例如,

'%f' % (1/10**8)
Run Code Online (Sandbox Code Playgroud)

将仅显示零.
详细信息在文档中

或者对于Python 3 ,等效的旧格式更新的样式格式

  • 我建议澄清你的陈述,说:"你自己管理精确度*显示*." 实际(Python内部)精度不会改变,就像在其他语言中经常做的那样. (7认同)

nmi*_*els 46

使用较新版本的Python(2.6及更高版本),您可以使用它''.format()来完成@SilentGhost建议的内容:

'{0:f}'.format(x/y)
Run Code Online (Sandbox Code Playgroud)

  • 这真的是你想要的吗?我不: ```>>> print('{:f}'.format(0.000000123))``` ```0.000000``` (5认同)

Den*_*zov 25

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

1
0.1
0.01
0.001
0.0001
0.00001
0.000001
0.000000000001
Run Code Online (Sandbox Code Playgroud)

numpy 有一个答案: np.format_float_positional

import numpy as np

def format_float(num):
    return np.format_float_positional(num, trim='-')
Run Code Online (Sandbox Code Playgroud)

  • 如果您想要一般的小数位数,这是**最好的答案**(即之前不需要指定小数位数)。 (2认同)

Sar*_*Zeb 21

如果是 numpy 数组,您可以使用抑制命令来抑制

import numpy as np
np.set_printoptions(suppress=True)
Run Code Online (Sandbox Code Playgroud)


Jos*_*jua 13

如果您使用的是熊猫并且想抑制所有浮标的科学计数法,则另一种选择是调整熊猫选项。

import pandas as pd
pd.options.display.float_format = '{:.2f}'.format
Run Code Online (Sandbox Code Playgroud)


qwe*_*url 10

您可以使用内置format函数。

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

  • 不幸的是,这会在漂亮的圆形浮点数末尾添加垃圾数字,例如:`format(0.001, '.50f') = '0.00100000000000000002081668171172168513294309377670'` (3认同)

Cap*_*ber 5

这将适用于任何指数:

def getExpandedScientificNotation(flt):
    str_vals = str(flt).split('e')
    coef = float(str_vals[0])
    exp = int(str_vals[1])
    return_val = ''
    if int(exp) > 0:
        return_val += str(coef).replace('.', '')
        return_val += ''.join(['0' for _ in range(0, abs(exp - len(str(coef).split('.')[1])))])
    elif int(exp) < 0:
        return_val += '0.'
        return_val += ''.join(['0' for _ in range(0, abs(exp) - 1)])
        return_val += str(coef).replace('.', '')
    return return_val
Run Code Online (Sandbox Code Playgroud)