字符串到双转换损失精度在斯威夫特
问题描述:
我想隐蔽字符串倍增,并保持相同的值:字符串到双转换损失精度在斯威夫特
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双倍?
更新:
转换后,即使四舍五入似乎不工作
我不想打印,我想计算和数字应该是正确是很重要的,它的钱计算和费率
答
首先:你不!你在这里遇到的是所谓的浮点不准确。计算机无法精确存储每个数字。 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))
}
http://floating-point-gui.de/ – Moritz
我是知道的,但我想[为什么是浮点的解决方案 – iOSGeek
可能的复制数字不准确?](http://*.com/questions/21895756/why-are-floating-point-numbers-incucurate) – Ben