Python浮点数格式化

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中。


如果你想使用科学计数法,那么你应该使用 g 而不是 f。例如,"%1.7g" % .0000012323 将变成 '1.2323e-06'。这是你想要的行为吗? - David Robinson
嗯,我不确定为什么,但那个好像没起作用。我正在使用Python 2.7,这有关系吗?不过那正是我想要的行为。 - CamelopardalisRex
@DavidRobinson:%g在某些情况下使用%f,例如,使用%1.7g格式化math.pi会得到3.141593%e始终使用“e”表示法。 - torek
2个回答

9
>>> '{:.7e}'.format(0.00000000000000365913456789)
'3.6591346e-15'

我的长度问题是一个Excel问题,而不是程序问题。(我将文件以.csv格式打开,Excel默认它的长度较短) - CamelopardalisRex
1
始终、始终优先使用.format而不是%格式化。这是它被推荐的另一个原因。 - SethMMorton

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
>>>

我实际上得到了默认精度为7个小数值。如果您想要控制,那么您可以使用@leon建议的format()方法。我已经相应地更新了我的答案。 - Manoj Pandey
我的长度问题是一个Excel问题,而不是程序问题。(我将文件打开为.csv,Excel默认它变短了)很抱歉我误以为是你的问题,其实是我的问题。有点晕。 - CamelopardalisRex
1
谢谢你告诉我。非常感激! - Manoj Pandey

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