2016-10-06 5 views
4

浮動小数点数を浮動小数点数に変換する必要があります。 Python 2.7では、正しい変換が行われますが、Pythonでは同じではありません。これは、Python 2.6で行うにはPython 2.6とどのようで同じではありませんなぜPython 2.6とPython 2.7での浮動小数点数の動作

は、私は誰も私を助けることができる

はPython 2.6で同じ動作をします。 Pythonの2.6

>>> a 
'60.000,494.100,361.600,553.494' 
>>> eval(a) 
(60.0, 494.10000000000002, 361.60000000000002, 553.49400000000003) 
>>> import ast 
>>> ast.literal_eval(a) 
(60.0, 494.10000000000002, 361.60000000000002, 553.49400000000003) 
>>> 

>>> for i in a.split(","): 
... float(i) 
... 
60.0 
494.10000000000002 
361.60000000000002 
553.49400000000003 
>>> 

のPython 2.7

>>> a 
'60.000,494.100,361.600,553.494' 
>>> eval(a) 
(60.0, 494.1, 361.6, 553.494) 
>>> import ast 
>>> ast.literal_eval(a) 
(60.0, 494.1, 361.6, 553.494) 
>>> 

>>> for i in a.split(","): 
... float(i) 
... 
60.0 
494.1 
361.6 
553.494 

そのが見えない

良い

[編集2]

だけプリント値と条件

print fGalleyTopRightOddX, ">=", tLinetextBbox[2], fGalleyTopRightOddX>=tLinetextBbox[2] 

361.6 >= 361.6 False 

I私は文字列からtLinetextBbox値を計算し、361.60000000000002fGalleyTopRightOddX値が、私はのapacheがサーバであるPythonのDjangoのプロジェクトに取り組んでいます361.6

です。 361.6すなわち

  1. fGalleyTopRightOddX361.60000000000002すなわちapacheの環境で
  2. tLinetextBboxを計算しているが、CMDに基づいて計算されて、私はline os.system

コマンドが実行するプログラムにfGalleyTopRightOddXを渡す意味[編集3] ちょうど1より多くの情報、

その後、私は、Python 2.6で同じ結果を得るために361.59999999999997

+8

どちらの場合でも正しい値を得ています。それはちょうどそのPython 2です。7 [浮動小数点数の表示方法の改善](https://docs.python.org/3/whatsnew/2.7.html#other-language-changes) (「すべてのコンピュータ科学者が浮動小数点数について知っておくべきこと」を頭に入れてください) – kennytm

+2

@kennytmどちらの場合も同じ*間違った値があると言う方がいいかもしれません。 –

+0

@kennytmとJohan:ありがとうございますが、私はまだ間違った答えを得ています。私は質問を更新しました、あなたは再び見ることができますか? –

答えて

4

としてtLinetextBbox谷を取得し、あなたが明示的に行う必要があり、n個のテキストファイル:

:としてこれを行うには、カスタム関数を作成する

'%.12g' % float_variable 

ベターPython's Decimal Objects文書を1として

def convert_to_my_float(float_value): 
    return float('%.12g' % float_value) 

Changed in version 2.6: leading and trailing whitespace characters are permitted when creating a Decimal instance from a string.

Changed in version 2.7: The argument to the constructor is now permitted to be a float instance.

への回答なぜ彼らは異なった動作をしていますか?は、Python 2.7のfloat.__repr__()float.__str__()のメソッドが変更されたためです。

+0

しかし、私はまだ間違った答えを得る。私は質問を更新しました、あなたは再び見ることができますか? –

+0

私はまだあなたの問題がないと思う。 'os'コマンドから' tLinetextBbox 'の値を計算して、私が言及した関数から必要な値を得て、返された値を*あなたのコマンド*に渡すのはどうですか? –

+0

あなたの機能は、動作していない '>>> convert_to_my_float(361.60000000000002) 361.60000000000002 >>> convert_to_my_float(361.6) 361.60000000000002 ' 私は疑問にEDIT3にいくつかの情報を追加しました。あなたは見えますか? –

関連する問題