在科学记数法中使用固定指数
考虑以下这段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.0200e9
和 020.0000e9
)?
4 个回答
2
对于那些多年后还在看到这个的人...
你可以使用Python的Decimal和quantize功能。
https://docs.python.org/3.6/library/decimal.html#decimal.Decimal.quantize
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
抱歉发这个,
谢谢!
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位,采用固定点格式”。