5

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

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 ?

更新:

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

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

4

1 回答 1

7

首先:你没有!您在这里遇到的称为浮点不准确性。计算机无法准确存储每个数字。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))
}
于 2016-04-29T11:03:32.527 回答