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

时间:2015-03-25 16:12:59

标签: python string python-2.7 scientific-notation

我正在使用this question来帮助我创建科学记数法功能,但不是4.08E+10而是我想要这个:4.08 x 10^10。所以我做了一个工作函数:

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行,但我似乎无法开始工作。

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

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

    TypeError:并非在字符串格式化期间转换所有参数

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

    x = 99999.2e(输出错误)

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

    x = 99999.0.2e(输出错误)

  4. 任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:2)

使用new string formatting。您正在使用的旧样式无论如何都已弃用:

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

答案 1 :(得分:2)

如果你必须这样做,那么最简单的方法就是使用内置格式化,然后将e+05e-12替换为你所拥有的任何东西:< / p>

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

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