首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Python转换为科学符号(A×10^B)

用Python转换为科学符号(A×10^B)
EN

Stack Overflow用户
提问于 2015-03-25 16:12:58
回答 2查看 4.4K关注 0票数 1

我使用这个问题来帮助我创建一个科学的表示法函数,但是,与4.08E+10不同,我想要的是:4.08 x 10^10。因此,我制作了一个工作函数,如下所示:

代码语言:javascript
复制
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) TypeError:不是所有在字符串格式化期间转换的参数
  2. x='%d.%de' %(num,sig) X= 99999.2e (不正确的输出)
  3. x='{0}.{1}e'.format(num,sig) X= 99999.0.2e (输出不正确)

任何帮助都将不胜感激!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-03-25 16:20:41

使用新字符串格式。不管怎么说,您使用的旧样式都是不推荐的:

代码语言:javascript
复制
In [1]: "{0:.{1}e}".format(3.0, 5)
Out[1]: '3.00000e+00'
票数 1
EN

Stack Overflow用户

发布于 2015-03-25 16:29:56

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

代码语言:javascript
复制
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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29260893

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档