HandyJSON icon indicating copy to clipboard operation
HandyJSON copied to clipboard

iOS 15 NumberFormatter number 转 string 丢失精度问题

Open raozhizhen opened this issue 4 years ago • 4 comments

IOS 14 上没问题,iOS 15 上, Source/BuiltInBasicType.swift 第 120 行,maximumFractionDigits 设置的 16,导致 number 转 string , 6979050226255138061 会转换成 "6979050226255130000"。可以将 maximumFractionDigits 改小点,比如 10。

raozhizhen avatar Jun 30 '21 03:06 raozhizhen

复现代码: let formatter = NumberFormatter() formatter.usesGroupingSeparator = false formatter.numberStyle = .decimal formatter.maximumFractionDigits = 16 let string = formatter.string(from: NSNumber.init(value: 6979050226255138061)) 对比 iOS 14 和 iOS 15 输出结果是不一致的

raozhizhen avatar Jun 30 '21 03:06 raozhizhen

同样遇到了,求大佬解决

luxulong avatar Sep 23 '21 06:09 luxulong

同样遇到了,求大佬解决

可以将 maximumFractionDigits 改小点,比如 10

lihongwwei avatar Sep 23 '21 09:09 lihongwwei

let formatter = NumberFormatter()
        formatter.numberStyle = .decimal
        formatter.minimumFractionDigits = 18
        formatter.maximumFractionDigits = 18
        formatter.roundingMode = .floor
        
        let number = NSDecimalNumber(string: "6.381569271192148411")
        let result = formatter.string(from: number)
        print(result!)

iOS 15: 6.381569271192150000 iOS 14: 6.381569271192148411

遇到类似的问题,在不改动 maximumFractionDigits 的情况下怎么修复这个问题啊?Thanks♪(・ω・)ノ

AlleniCode avatar Dec 01 '21 11:12 AlleniCode