ios - swift 解决问题

标签 ios swift double rounding

我有这个信息。

let params2: [String: AnyObject] = [
    "app_token": myapptoken,
    "member_access_token": accessToken!,
    "pay_process": 0,
    "payamount_credit": 9.87 //hardcode
]

当打印params2

The result is

[“app_token”:myapptoken,“member_access_token”:accessToken,“payamount_credit”:9.869999999999999,“pay_process”:0]

"payamount_credit": 9.87 现在是 "payamount_credit": 9.869999999999999

我已经尝试了所有存在的方式,但表现相同。

NSString(格式: "%.\2f", 9.87)

双(round(1000*9.87)/1000)

最奇怪的是,只有这个特定数字 (9.87) 才会发生,这很神秘。

Playground Screen.

enter image description here

最佳答案

问题出在 numeric precission 中,简单地说,有些数字不能定义为 Double 而不会丢失精度。

相反,您应该使用 NSDecimalNumber :

let num = NSDecimalNumber(string: "9.87")

关于ios - swift 解决问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37794622/

相关文章:

ios - Swift:字符后的字符串firstIndex

ios - 如何快速返回异步内部函数内的外部函数?

java - 关于java中从 double 到整数的自动舍入结果?

java - 小数格式和 double

ios - 为什么我的函数输出一个看起来像内存地址的随机值?

ios - 如何连接到 TokBox 中的用户流

ios - 如何在 Interface Builder 中使用自动布局为自调整 UITableViewCell 设置约束

ios - XCode中带有环境变量的条件链接静态库

swift - 'dispatch_get_main_queue()' 的模糊使用 - XMPP

iphone - 如何更改 iOS 上后退按钮的位置?