在科学计数法中使用固定的指数

19
考虑以下Python代码片段:
for ix in [0.02, 0.2, 2, 20, 200, 2000]:
    iss = str(ix) + "e9"
    isf = float(iss)
    print(iss + "\t=> " + ("%04.03e" % isf) + " (" + str(isf) + ")")

它会生成以下输出:
0.02e9  => 2.000e+07 (20000000.0)
0.2e9   => 2.000e+08 (200000000.0)
2e9     => 2.000e+09 (2000000000.0)
20e9    => 2.000e+10 (20000000000.0)
200e9   => 2.000e+11 (2e+11)
2000e9  => 2.000e+12 (2e+12)

有没有办法“回到”之前的状态?也就是说:

2.000e+07 => 0.02e9 
2.000e+08 => 0.2e9
2.000e+09 => 2e9    
2.000e+10 => 20e9   
2.000e+11 => 200e9  
2.000e+12 => 2000e9

我想指定指数为e+09; 然后无论我输入什么数字,这个假设的函数都会返回该指数中的数字值。是否可以在每种情况下都指定整数部分和小数部分的零填充?(即000.0200e9020.0000e9)?

3个回答

29

自己格式化(参见格式说明小语言):

for ix in [.02e9, .2e9, 2e9, 20e9, 200e9, 2000e9]:
    print('{:.3e} => {:0=8.3f}e9'.format(ix, ix / 1e9))

输出

2.000e+07 => 0000.020e9
2.000e+08 => 0000.200e9
2.000e+09 => 0002.000e9
2.000e+10 => 0020.000e9
2.000e+11 => 0200.000e9
2.000e+12 => 2000.000e9

解释

{:0=8.3f} 表示“零填充,在符号和数字之间填充,总字段宽度为8,小数点后3位,固定点格式”。


非常感谢您,@Mark Tolonen - 我忘记自己做除法了;干杯! - sdaau

2

2
你能展示一下你打算在这里如何使用它吗? - mkrieger1

2
啊,好的,我明白了:
for ix in [0.02, 0.2, 2, 20, 200, 2000]:
  iss=str(ix) + "e9"
  isf=float(iss)
  isf2=isf/float("1e9")
  isf2s = ("%04.03f" % isf2) + "e9"
  print(iss + "\t=> " + ("%04.03e" % isf ) + " (" + str(isf) + ")" + " -> " + isf2s )

...的结果是:

0.02e9  => 2.000e+07 (20000000.0) -> 0.020e9
0.2e9   => 2.000e+08 (200000000.0) -> 0.200e9
2e9 => 2.000e+09 (2000000000.0) -> 2.000e9
20e9    => 2.000e+10 (20000000000.0) -> 20.000e9
200e9   => 2.000e+11 (2e+11) -> 200.000e9
2000e9  => 2.000e+12 (2e+12) -> 2000.000e9

抱歉发帖,
干杯!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接