将数字转换为固定长度的科学计数法字符串
我有一些普通的浮点数,比如“1234.567”或者“100000”。我想把它们转换成字符串,要求小数点后面的位数固定,并且以科学计数法的形式表示。比如说,如果我想要5位数字,结果应该是“1.2346e003”和“1.0000e005”。但是,内置的Decimal数字转字符串的功能会自动四舍五入,所以第二个数字会变成“1e005”,即使我想要更多的数字。这让我很困扰,因为我希望所有的数字都是相同长度。
有没有一种“pythonic”的方法可以做到这一点,而不需要复杂的字符串操作呢?
3 个回答
1
你可以使用 %e 这个字符串格式化工具:
>>> '%1.5e'%1234.567
'1.23457e+03'
>>> "%1.5e"%100000
'1.00000e+05'
%x.ye 这里的 x 代表最小字符数,y 代表最大精度。
1
如果你想保持像你例子中那样的三位数指数,你可以自己定义一个函数。下面是一个从这个回答改编的例子:
def eformat(f, prec, exp_digits):
s = "%.*e"%(prec, f)
mantissa, exp = s.split('e')
return "%se%0*d"%(mantissa, exp_digits, int(exp))
>>> print eformat(1234.567, 4, 3)
1.2346e003
1
precision = 2
number_to_convert = 10000
print "%0.*e"%(precision,number_to_convert)
你是在问这个吗?