在我的 iOS swift 应用程序中,我从网络上收到一些 json,其中包含一些代表货币的 double 值。它看起来像这样:
[{"Amount": 5.0},{"Amount":-26.07},{"Amount": 4}, ...etc]
我将它们转换为 Double,然后尝试将这些值作为 Swift“Double”提供给 NSDecimalNumber 的构造函数,如下所示:
let amount = NSDecimalNumber(double: amountAsDouble)
我在使用这种方法时遇到了问题,因为我创建的 NSDecimalNumber 经常会包含一个不同的数字,小数点后 16 位。
let amount = NSDecimalNumber(double: -15.97)
println(amount)
返回 -15.970000000000004096
我不想要这个,我想要 -15.97。 谢谢,
最佳答案
Double
以 18 位十进制数字存储,您对此无能为力,它就是这样工作的。
阅读此处:http://en.wikipedia.org/wiki/Double-precision_floating-point_format
但是,在屏幕上显示值时,您可以像这样使用 NSNumberFormatter
:
let amountInDouble: Double = -15.970000000000004096
let formatter = NSNumberFormatter()
formatter.numberStyle = .DecimalStyle
formatter.roundingIncrement = 0.01
formatter.maximumFractionDigits = 2
let amountAsString = formatter.stringFromNumber(NSNumber(double: amountInDouble))
if let amountAsString = amountAsString {
println(amountAsString) // -15.97
}
关于ios - NSDecimalNumber 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28569649/