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

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 は 10 ではなく 0: を生成する可能性があります。

sys.platform と sys.version の値を教えていただけますか? (インタラクティブな Python インタープリターを起動したときに出力されるバージョン ヘッダーで十分です。)

関連するソース ファイル: PyOS_snprintf の Python/mysnprintf.c、float_repr の Objects/floatobject.c、PyOS_string_to_double の Python/pystrtod.c。

于 2017-09-11T10:36:42.300 に答える