String to Double转换在Swift中失去了精度

时间:2016-04-29 10:53:41

标签: ios floating-point 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 个答案:

答案 0 :(得分: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))
}