首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NSDecimalNumber问题

NSDecimalNumber问题
EN

Stack Overflow用户
提问于 2015-02-18 03:33:16
回答 5查看 951关注 0票数 0

在我的iOS swift应用程序中,我从web收到一些json,其中包含一些表示货币的双精度值。它看起来是这样的:

代码语言:javascript
复制
[{"Amount": 5.0},{"Amount":-26.07},{"Amount": 4}, ...etc]

我将这些值转换为Double,然后尝试将这些值作为Swift "Double“提供给NSDecimalNumber的构造函数,如下所示:

代码语言:javascript
复制
let amount = NSDecimalNumber(double: amountAsDouble)

我遇到了这种方法的问题,因为我创建的NSDecimalNumber经常会包含一个不同的数字,小数点后16位。

代码语言:javascript
复制
let amount = NSDecimalNumber(double: -15.97)
println(amount)

这将返回-15.970000000000004096

我不想要这个,我要-15.97。谢谢,

EN

回答 5

Stack Overflow用户

发布于 2015-04-02 05:22:28

我最近亲身经历了这一切。我最终使用了一个NSNumberFormatter来获得正确的小数位。

代码语言:javascript
复制
let currFormatter = NSNumberFormatter()
    currFormatter.numberStyle = .DecimalStyle
    currFormatter.roundingIncrement = 0.01
    currFormatter.minimumFractionDigits = 2
    currFormatter.maximumFractionDigits = 2

let doubleAmount = currFormatter.numberFromString(amountAsDouble) as NSNumber!
let amount = doubleAmount as Double
println(amount)
票数 1
EN

Stack Overflow用户

发布于 2015-04-02 05:29:46

这里有一个提示:如果您使用NSJSONSerializer,带小数点的数字实际上会转换为NSDecimalNumber。NSDecimalNumber是NSNumber的一个子类。所以您要做的是:您已经得到了一个非常好的NSDecimalNumber,将值舍入为double,然后尝试将double转换回NSDecimalNumber。只需检查您所拥有的是否确实是NSDecimalNumber,如果是,请不要进行转换。

票数 1
EN

Stack Overflow用户

发布于 2015-04-02 05:39:51

Double是用18位十进制数字存储的,你对此无能为力,这就是它的工作方式。

点击此处阅读:http://en.wikipedia.org/wiki/Double-precision_floating-point_format

但是,在屏幕上显示该值时,您可以像这样使用NSNumberFormatter

代码语言:javascript
复制
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
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/28569649

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档