2017-01-04 7 views
1

私はいくつかの浮動小数点が異なって変換されていることに気付きました。 This question helps me about floating pointsしかし、なぜこれが起こるのかまだ分かりませんか?サンプルコードについて、デバッグモードから2つのスクリーンショットを追加しました。値の例:7.37および9.37。迅速かつ確実に迅速に使用されましたIEEE 754 floating point standard Plsはこれがどう起こるか説明します。変換がどのように異なって終了したか?これはなぜ浮動小数点変換で起こりますか?

if let text = textField.text { 
    if let number = formatter.number(from: text) { 
    return Double(number) 
    } 
    return nil 
} 

enter image description here

enter image description here

+1

浮動小数点数は*有限の精度* - あなたがリンクした答えのどの部分がはっきりしていませんか? –

+0

比較http://stackoverflow.com/a/39777334/1187415:数値の表示方法によっては、 'description'や' debugDescription'が使われています。これら2つのメソッドは、文字列への変換に異なる精度を使います。 –

+0

リンクされたQは明らかですが、なぜ7.37が9.37のように収束していないのか分かりません。私は7.37が右から収束する(7.3700000.1)が、9.37は左から収束することを意味する(9.36999.2)。 @マーティンrは、URのおかげで答えが、まだ私には明らかではありません。私はUのコメント – yilmazburk

答えて

1

Double浮動小数点数は、ベース2に格納されており、正確にすべての小数を表すことができません。

この場合、7.37と9.37は、それぞれ7.37000000000010658141036401502788066864013671875と9.36999999999992184029906638897955417633056640625の最も近い浮動小数点数に丸められます。

もちろん、このような10進表現は一般的に使用するにはあまりにも扱いにくいため、プログラミング言語は通常、10進表現の近似値を短く表示します。 2つの人気の選択肢が正しく(この場合には、それぞれ、7.37及び9.37ある)元の数に四捨五入される最短の文字列

  1. あります。
  2. 小数点第4位は17桁です。is guaranteed to give the correct value when converting back to binaryです。

これらは、表示されている2つのデバッグ出力値に対応しています。

関連する問題