1.0から1.25までの数の配列を作成しようとしています。結果はheightDisplayArrayに予想通り追加されますが、heightArrayに、いくつかの予想外の数字を追加して、いくつかの理由数値を0.01回繰り返すと、数回繰り返した後に.0000000000000001が加算されます。
heightDisplayArray: [String] = []
heightArray: [Double] = []
for i in 1.stride(to: 1.25, by: 0.01){
heightDisplayArray.append("\(i) meters")
heightArray.append(i)
}
print (heightDisplayArray)
print (heightArray)
:私は、次のコードを使用します。コンソールには次の情報が表示されます。
["1.0 meters", "1.01 meters", "1.02 meters", "1.03 meters", "1.04 meters", "1.05 meters", "1.06 meters", "1.07 meters", "1.08 meters", "1.09 meters", "1.1 meters", "1.11 meters", "1.12 meters", "1.13 meters", "1.14 meters", "1.15 meters", "1.16 meters", "1.17 meters", "1.18 meters", "1.19 meters", "1.2 meters", "1.21 meters", "1.22 meters", "1.23 meters", "1.24 meters"]
[1.0, 1.01, 1.02, 1.03, 1.04, 1.05, 1.0600000000000001, 1.0700000000000001, 1.0800000000000001, 1.0900000000000001, 1.1000000000000001, 1.1100000000000001, 1.1200000000000001, 1.1300000000000001, 1.1400000000000001, 1.1500000000000001, 1.1600000000000001, 1.1700000000000002, 1.1800000000000002, 1.1900000000000002, 1.2000000000000002, 1.2100000000000002, 1.2200000000000002, 1.2300000000000002, 1.2400000000000002]
どのようにこの動作を修正できますか?私はheightArrayをDoublesの代わりにStringの配列に変更することができましたが、実際にこれが発生する原因を見つけることを好むでしょう。
http://stackoverflow.com/questions/588004/is-floating-point-math-broken – Mat