2017-06-02 8 views

答えて

0

タイプを指定しない場合は、浮動小数点数リテラルはタイプDoubleのものであると推測されます。

Doubleという名前が示すように、倍精度はFloatよりも大きいです。あなたがそうするとき:

let a = 64.1 

実際のメモリの値は、64.099999999999991のようなものかもしれません。 Doubleは16桁の有効数字しか示していないので、最後の "1"を四捨五入して64.09999999999999を示しています。

なぜlet b: Float = 64.1に正しい番号が表示されますか?

浮動小数点型を指定すると、精度が低下します。 Floatは8桁の有効数字のみを表示します。それは64.099999ですが、それに続いて「9」が続きますので、64.1になるように丸めます。

これは、変数型を明示的に示すこととは関係ありません。それはDoubleであることを指定してみてください:

let b: Double = 64.1 

それはまだ64.09999999999999が表示されます。

+0

ありがとうございます。私はなぜ64未満の丸数字ではないのか理解できませんでした.64と63の違いは何ですか?ラウンドについてですか? –

+0

浮動小数点数は実際には予測できません。 64.1が64.09999999999999xxxx ...のようにメモリに格納されていることが起こります。ここで、 "x"は不明です。 @KorayYavic – Sweeper

関連する問題