将数字转换为固定长度的科学计数法字符串

0 投票
3 回答
1937 浏览
提问于 2025-04-18 07:58

我有一些普通的浮点数,比如“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)

你是在问这个吗?

撰写回答