String 到 Double 转换在 Swift 中失去精度

String to Double conversion loses precision in Swift

我想将一个字符串转换为两倍并保持相同的值:

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 作为 Double ??

更新:

即使转换后四舍五入似乎也不起作用

我不想打印,我想计算,重要的是数字应该正确,这是货币计算和汇率

首先:你没有!您在这里遇到的情况称为浮点不准确。计算机无法精确存储每个数字。 2.4 无法在浮点类型中无损存储。

其次:由于浮点数始终是一个问题,而您在这里处理金钱(我猜您正试图存储 2.4 法郎),您的第一个解决方案是:不要使用浮点数。使用从 numberFromString 得到的 NSNumber,不要试图从中得到 Double
或者通过乘法移动逗号并将其存储为 Int.

第一个解决方案可能类似于:

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