转换为Python中的科学计数法(A × 10^B)

Convert to scientific notation in Python (A × 10^B)

我使用 this question 来帮助我创建科学记数法函数,但是我想要的不是 4.08E+104.08 x 10^10。所以我做了一个 working 函数,如下所示:

def SciNotation(num,sig):
    x='%.2e'  %num  #<-- Instead of 2, input sig here
    x= x.split('e')
    if (x[1])[0] == "-":
        return x[0]+" x 10^"+ x[1].lstrip('0')
    else:
        return x[0]+" x 10^"+ (x[1])[1:].lstrip('0')

num = float(raw_input("Enter number: "))
sig = raw_input("Enter significant figures: ")
print SciNotation(num,2)

这个函数,当输入 99999 时,将打印 1.00 x 10^5 的输出(2 位有效数字)。但是,我需要使用我的 sig 变量(用户输入的重要数字的数量)。我知道我必须将 sig 变量输入代码的第 2 行,但我似乎无法开始工作。

到目前为止我已经尝试过(输入 num=99999,sig=2):

  1. x='%.%de' %(num,sig)

    类型错误:在字符串格式化期间并非所有参数都已转换

  2. x='%d.%de' %(num,sig)

    x = 99999.2e(输出不正确)

  3. x='{0}.{1}e'.format(num,sig)

    x = 99999.0.2e(输出不正确)

如有任何帮助,我们将不胜感激!

使用new string formatting。无论如何,您使用的旧样式已被弃用:

In [1]: "{0:.{1}e}".format(3.0, 5)
Out[1]: '3.00000e+00'

如果您必须这样做,那么最简单的方法就是使用内置格式,然后将 e+05e-12 替换为您想要的任何内容:

def sci_notation(number, sig_fig=2):
    ret_string = "{0:.{1:d}e}".format(number, sig_fig)
    a, b = ret_string.split("e")
    # remove leading "+" and strip leading zeros
    b = int(b)
    return a + " * 10^" + str(b)

print sci_notation(10000, sig_fig=4)
# 1.0000 * 10^4