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

Posted

技术标签:

【中文标题】在 Python 中转换为科学计数法 (A × 10^B)【英文标题】:Convert to scientific notation in Python (A × 10^B) 【发布时间】:2015-03-25 16:12:58 【问题描述】:

我使用this question 来帮助我创建科学记数法函数,但是我想要的是4.08E+10 而不是4.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):

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

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

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

    x = 99999.2e(输出不正确)

    x='0.1e'.format(num,sig)

    x = 99999.0.2e(输出不正确)

任何帮助将不胜感激!

【问题讨论】:

您确定要这样做吗?您在这里重新发明***,大多数语言/应用程序都支持4.08E+10 表示法 它只是为了以更易读的方式打印输出。 它的可读性如何?它也更难解析,所以如果你稍后再看它,你也将不得不创建更多代码来读取它...... 如果 Python 支持上标会更好,但显然它不支持 @logic 没有任何东西可以启用或阻止 Python 输出上标字符。您是否将它们打印到支持该输出的输出? 【参考方案1】:

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

def sci_notation(number, sig_fig=2):
    ret_string = "0:.1:de".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

【讨论】:

我不确定为什么 OP 接受了该问题的其他答案。这显然是预期的结果。【参考方案2】:

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

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

【讨论】:

"而不是 4.08E+10 我想要这个:4.08 x 10^10" - 这正是你不想要的...... @logic 非常正确。无论如何,我认为您的日常工作可以清理干净,看看我下面的内容。它可以在一行中完成,但会有点混乱。

以上是关于在 Python 中转换为科学计数法 (A × 10^B)的主要内容,如果未能解决你的问题,请参考以下文章

Python:将字符串(科学计数法)转换为浮点数

是否有将值和错误转换为科学计数法的 python 模块?

科学记数法如何批量转换成正常的文本或者数字

在 Python 中为变量分配科学记数法

科学记数法和从 DB 输出到 Python 中 JSON 的转换

将科学记数法转换为十进制 - python