4

我已经看到了一些关于这个的问题,但是我读到的没有一个能帮助我真正理解为什么我想做的事情失败了。

所以我有一堆浮点值,它们有不同的精度。有些是 0.1,有些是 1.759374,等等。我想格式化它们,所以它们都以“+0.0000000E+00”的形式我试过

number = '%1.7f' % oldnumber

但这没有用。我以为我告诉它要做的是“一个数字代表小数点,然后是 7,浮点数”,但它不起作用。我并没有真正得到文档中的示例,这些示例似乎甚至不关心“小数点前后”问题,而且我没有找到关于小数点前后修复的问题。

现在,我知道我的一些数字是 0.0437 或类似的,我希望它们显示为 4.3700000E-02 或其他东西。我有点希望它会自己做 E 位,但如果它没有,我该怎么做呢?

这是我的确切行:

RealValConv =   '%1.7g' % struct.unpack('!f',    RealVal.decode('hex'))[0]

RealVal 是一个十六进制数字,代表我想要的值。

此外,这是在 Python 2.7 中

4

2 回答 2

9
>>> '{:.7e}'.format(0.00000000000000365913456789)
'3.6591346e-15'
于 2013-09-10T00:29:49.663 回答
3

您可以使用科学记数法格式: 像这样:

number = '%e' % oldnumber

>>> x = 1.759374
>>> print '%e' % x
1.759374e+00
>>>
>>> x = 1.79
>>> print '%e' % x
1.790000e+00
>>>
>>> x = 1.798775655
>>> print '%e' % x
1.798776e+00
>>>

或者,如果您想控制精度,可以使用@leon 方法 (+1) 建议的格式方法。

>>> x = 1.759374
>>>
>>> print('{:.2e}'.format(x))
1.76e+00
>>>
>>> print('{:.10e}'.format(x))
1.7593740000e+00
>>>
>>> print('{:.4e}'.format(x))
1.7594e+00
>>>
于 2013-09-10T00:32:22.950 回答