/ / StringからDoubleへの変換はSwiftで精度を失う - ios、浮動小数点、double、nsnumberformatter、swift2.2

Double to String変換は、Swift-ios、浮動小数点、double、nsnumberformatter、swift2.2の精度を失います。

文字列をdoubleに変換して同じ値を保持したいのですが。

let myStr = "2.40"
let numberFormatter = NSNumberFormatter()
numberFormatter.locale = NSLocale(localeIdentifier: "fr_FR")
let myDouble = numberFormatter.numberFromString(myStr)?.doubleValue ?? 0.0

myDoubleは今

Double? 2.3999999999999999

だからどのように "2.40"を正確に倍精度2.40に変換するには?

更新:

変換後の丸めでも機能しないようです

印刷したくない、計算したくない、数字が正しいことが重要です、お金の計算と料金

回答:

回答№1は6

最初に:あなたは「しないでください!ここで遭遇したことは浮動小数点数の不正確さと呼ばれます。コンピュータは正確にすべての数を格納することはできません。 2.4 浮動小数点型の中にロスレスで格納することはできません。

第二に:浮動小数点は常に問題であり、あなたはここでお金を扱っているので(私はあなたが2.4フランを格納しようとしていると思います)あなたの一番の解決策は次のとおりです。 浮動小数点数を使わない。使用 NSNumber あなたはから得る numberFromString と取得しようとしないでください Double それから。
あるいは、コンマを乗算してシフトし、次のように格納します。 Int.

最初の解決策は次のようになります。

if let num = myDouble {
let value = NSDecimalNumber(decimal: num.decimalValue)
let output = value.decimalNumberByMultiplyingBy(NSDecimalNumber(integer: 10))
}