ios - NSDecimalNumber 问题

标签 ios swift nsdecimalnumber

在我的 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/

相关文章:

iphone - 在 Objective C 中运行 AJAX 代码

iphone - 从appDelegate检索核心数据模型版本

arrays - 在另一个 Swift 文件中使用返回值(字符串数组)

ios - NumberFormatter 字符串(来自 :NSNumber) method has issues with decimal places

ios - 运行 pod install : Invalid attribute name 时出错

ios - 如何降低 UIScrollview 的滚动速度?

ios - xcode swift AnyObject 到 Swift 转换

swift - 将 Double 从核心数据返回到文本字段

objective-c - 比较 NSDecimalNumber 的不同方法

ios - objective-c 中大于38位数字的乘法或除法