ios - NSNumberFormatter 设置为十进制样式时返回科学记数法

标签 ios swift nsnumber

我正在尝试使用它们的 persistentId(NSNumbers)来保存和检索 MPMediaPlaylists。由于我的类(class)设置,我需要将这些 ID 保存为字符串。但是,当我尝试将字符串转换回 NSNumber 时,它们以科学记数法而不是十进制形式出现。这是我的代码:

let numberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
let number = numberFormatter.numberFromString(playlists[indexPath.row].id)
println(playlists[indexPath.row].id)
println(number)

.id 是我的播放列表对象的一个​​属性,它是一个字符串。对于一个播放列表,输出:

13818827612659406491
1.381882761265941e+19

我错过了什么?

最佳答案

来自文档:

Double 的精度至少为 15 位小数,而 Float 的精度可以低至 6 位小数。要使用的适当浮点类型取决于您需要在代码中使用的值的性质和范围。

您的号码精度超过 15 位。

let str = "13818827612659406491" // 20 digits
let numberFormatter = NSNumberFormatter()
numberFormatter.numberStyle = NSNumberFormatterStyle.DecimalStyle
let number = numberFormatter.numberFromString(str) //13,818,827,612,659,400,000.0 - 15 significant digits

同样来自文档:

NSDecimalNumber 是 NSNumber 的一个不可变子类,它提供了一个面向对象的包装器来进行以 10 为基数的算术运算。实例可以表示任何可以表示为尾数 x 10^exponent 的数字,其中尾数是长度不超过 38 位 的十进制整数,指数是从 –128 到 127 的整数。

这就是 OP 自己的答案有效的原因。

关于ios - NSNumberFormatter 设置为十进制样式时返回科学记数法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24383562/

相关文章:

objective-c - NSURL连接队列

iphone - 如何判断 Core Data 的 NSNumber 属性的类型

iphone - 如何从 NSArray 中获取 NSNumber 的总和?

c# - 单点触控 : Can't create DbParameterCollection?

ios - 面向 iPhone 开发人员的 Mac OS X 上的 OpenGL

ios - 我应该在 ViewController 中的什么位置放置初始化代码?

ios - 我什么时候想在 swift 2.2 中使用 static, final, private?

iphone - 实例级计数器的 NSNumber 是否矫枉过正?

ios - 如何tableView :cellForRowAtIndexPath: is supposed to be used?

ios - 在 UICollectionView 中选择时将单元格展开到全屏