文字列を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))
}