5

我有一个从文本文件中读取的浮点列表。经过一些数据处理后,我使用以下命令将列表写入文件:

for val in flist:
    sa = '{0}'.format(val)
    fout.write(sa)

对于特定的输入文件,输出文件将在字符串中包含一个 ':'。我已经运行调试并在故障点停止了脚本。该值应为 58710000.0

[Dbg]>>> print val[464]
   5870:000.0
[Dbg]>>> fa = val[464]
[Dbg]>>> print fa
  5870:000.0
[Dbg]>>> 
[Dbg]>>> fa = fa + 1
[Dbg]>>> print fa
   58710001.0
[Dbg]>>> fa = fa - 1
[Dbg]>>> print fa
   5870:000.0

这只发生在某些文件和浮点数上

有什么建议么?

4

3 回答 3

4

这是 Python 2.7.3 或更早版本中的一个错误,在某些环境下。

用户@ecatmur 在另一篇文章中指出了一个类似的问题,即 '9' + 1 = ':'ASCII

这已在更高版本的 Python 中得到修复。
具体来说,该问题在Python 2.7.5中消失了,因此该问题已得到修复。

请参阅 Gord Thompson 接受的答案:

类似的问题已关闭或未回答:

于 2017-09-11T09:48:27.733 回答
0

您的值可能实际上不是floats。总之,sa = '{0}'.format(val)很傻;你不妨这样做sa = str(val)。但是如果你这样做sa = '%f' % (val,),当 val 不是 a 时,你会得到一个异常float

于 2013-01-09T00:39:29.000 回答
0

这似乎是高度特定于平台的。float 的 repr 调用 PyOS_double_to_string 最终调用 PyOS_snprintf,后者用一些代码包装 snprintf 以使该函数在平台之间更加一致。它特别出现在某些版本的 AIX 上,snprintf 可以产生 0: 而不是 10。

你能分享你的 sys.platform 和 sys.version 值吗?(启动交互式 python 解释器时打印的版本标题应该可以。)

相关源文件:Python/mysnprintf.c 用于 PyOS_snprintf,Objects/floatobject.c 用于 float_repr,Python/pystrtod.c 用于 PyOS_string_to_double。

于 2017-09-11T10:36:42.300 回答