###前提・実現したいこと
swiftでDouble型の切り捨てがしたい。
現在、型変換と切り捨てを行う汎用的に使える関数を製作しております。
ソースコードに乗せているものは、Double型の数値を受け取り、小数点第二位で切り捨てを行った後、Double型で値を返しています。
###発生している問題・エラーメッセージ
1.50...という値に小数点第二位で切り捨てをかけると、1.4という値が出てきてしまいます。
浮動小数点で誤差が出てしまうことを修正したいです。
###該当のソースコード
swift
1 static func FloorDtoD(number : Double) -> Double{ 2 3 return Double(Int(number * Double(10.0))) / Double(10.0) 4 }
swift
1 static func FloorDtoD(number : Double) -> Double{ 2 3 var ansser : Double = number 4 ansser = ansser * Double(10.0) 5 ansser = floor(ansser) 6 return ansser / Double(10.0) 7 }
###試したこと
nsdecimalnumberを使用した方法も試しましたが、きちんと切り捨てられない(切り捨ててない)ことや、nsdecimalnumberをDouble型に変換し直さないといけないため、正しい値が得られませんでした。
nsdecimalnumberでStringを使用する方法は、まだ、試せていません。
###補足情報(言語/FW/ツール等のバージョンなど)
swift2.3
Xcode7.3.1
追記になります
swift
1 static func FloorDtoD(number : Double) -> Double{ 2 3 let str : String = String(number) 4 let ansser : NSDecimalNumber = NSDecimalNumber(string : str) 5 6 let behavior = NSDecimalNumberHandler( 7 roundingMode: .RoundDown, 8 scale: 2, 9 raiseOnExactness: false, 10 raiseOnOverflow: false, 11 raiseOnUnderflow: false, 12 raiseOnDivideByZero: false) 13 14 return Double(ansser.decimalNumberByRoundingAccordingToBehavior(behavior)) 15 }
こちらでも、1.5ではなく、1.4になってしまう場合があることを確認しました。
また、引数のnumberですが、こちらには1.5が入っていることを確認しました。
回答3件
あなたの回答
tips
プレビュー