前提・実現したいこと
Double型の小数を引き算し、小数点以下4桁を切り捨てしたい。
小数点以下3桁同士の引き算をしたいのですが、計算結果に誤差が生じてしまいます。
以下のようなコードで小数点以下4桁を切り捨てようとしましたが、3.8999999999999999のような値を返してしまいます。
浮動小数点で誤差が生じてしまうのを修正したいです。
質問用にコードを書き換えていたので、そのままのコードを追記しました。
print(Double(range)/1000) では誤差は生じていませんが、配列pipsに格納すると誤差が生じます。
ソースコード
Swift
1 func roundingOffe() { 2 3 for i in 0...9 { 4 var range = floor(fabs(Double(dictionary[i][1])!) - Double(dictionary[i][4])!) * 100000 )) 5 array[i] = range) / 1000 6 } 7 8 print(array) //[12.199, 3.8999999999999999, 2.899, 8.6989999999999998, 42.399999999999999, 15.298999999999999, 0.69999999999999996, 1.8, 5.5999999999999996, 10.099] 9 10 } 11 12 13 14//追記 15 func range() { 16 17 for i in 0...9 { 18 19 var range = Int(floor(fabs(Double(newDictionary[2*(2*i+1)][1])! - Double(newDictionary[2*(2*i+4)][4])!) * 100000 )) 20 21 print(Double(range)/1000) 22 //=>12.199 3.9 2.899 8.699 42.4 15.299 0.7 1.8 5.6 10.099 23 24 pips[i] = Double(range) / 1000 25 26 } 27 28 print(pips) 29 //=>[12.199, 3.8999999999999999, 2.899, 8.6989999999999998, 42.399999999999999, 15.298999999999999, 0.69999999999999996, 1.8, 5.5999999999999996, 10.099] 30 31 }
試したこと
floor()、round()両方試しました。Int型に直してから/1000してDouble型に戻しても誤差が生じてしまいます。
エラーの出ないコードを書いてください。また、そのままで検証できるコードを書いていただけるとありがたいです。
回答2件
あなたの回答
tips
プレビュー