KakaJSON icon indicating copy to clipboard operation
KakaJSON copied to clipboard

Hi,使用的时候发现:解析大的 Int 数据会失败

Open Junnor opened this issue 5 years ago • 3 comments

1

` static func number( value: Any, _ type: Any.Type) -> NumberValue? { guard let str = _numberString(value) else { return nil } guard let decimal = Decimal(string: str) else { return nil }

    // digit
    if let digitType = type as? DigitValue.Type {
        // 大 Int 数据解析永远是 18035768958676992
        // let x = 18035768958676993,             // 解析失败, 解析结果成 18035768958676992
        // let y = 18035768958676992              // 解析成功
        return Double("\(decimal)")
            .flatMap { NSNumber(value: $0) }
            .flatMap { digitType.init(truncating: $0) }
    }
    
    // decimal number
    if type is NSDecimalNumber.Type {
        return NSDecimalNumber(decimal: decimal)
    }
    
    // decimal
    if type is Decimal.Type { return decimal }
    
    // other
    return Double("\(decimal)").flatMap { NSNumber(value: $0) }
}

`

Junnor avatar Jan 09 '21 09:01 Junnor

Double("(decimal)") 的这个解析由于精度问题会返回不一样的值

Junnor avatar Jan 09 '21 09:01 Junnor

image 跟 #46 一样的, 我是这样改的,可以参考一下。

zhuangxq avatar Jan 15 '21 02:01 zhuangxq

@zhuangxq 你好,感谢提供解决方法。 我目前的解决办法是直接把model里面的 Int 设置成String了,😂,那样精度问题也就不存在了。

Junnor avatar Jan 15 '21 08:01 Junnor