HandyJSON icon indicating copy to clipboard operation
HandyJSON copied to clipboard

用string 接收longInt时iOS 15 精度转换不准

Open FlymBai opened this issue 3 years ago • 8 comments

FlymBai avatar Sep 23 '21 10:09 FlymBai

一样遇到了,后台返回long类型,客户端String类型接收,在iOS15上精度丢失了。。。

HLTangbinbin avatar Sep 24 '21 07:09 HLTangbinbin

I have a long int type id 234782649242226688,parse to string result is 234782649242226000 in iOS 15

Adenc avatar Sep 26 '21 07:09 Adenc

我也是这样子,搞得一些功能都用不了,只能用Int64去接收

zhangjinlin avatar Sep 27 '21 08:09 zhangjinlin

BuiltInBasicType.swift 修改下这块 image

wanghao522 avatar Oct 08 '21 09:10 wanghao522

So did I

企业微信截图_906fb40f-bbf7-4d67-9fd2-d32c988ff444

hwenxzhangling avatar Nov 18 '21 02:11 hwenxzhangling

number.stringValue是会有问题的,例如 589.68 image

LiuXiangJing avatar Nov 18 '21 10:11 LiuXiangJing

后来解决了吗?

xgjyjy avatar May 25 '22 05:05 xgjyjy

Podfile添加如下文本替换方法,其实就是BuiltInBasicType.swift中,formatter.maximumFractionDigits = 16这行改成10.

#iOS 15 NumberFormatter number 转 string 丢失精度问题, post_install do |installer| find_and_replace("Pods/HandyJSON/Source/BuiltInBasicType.swift", "formatter.maximumFractionDigits = 16", "formatter.maximumFractionDigits = 10") end

def find_and_replace(dir, findstr, replacestr) Dir[dir].each do |name| FileUtils.chmod("+w", name) #add text = File.read(name) replace = text.gsub(findstr,replacestr) if text != replace puts "Fix: " + name File.open(name, "w") { |file| file.puts replace } STDOUT.flush end end Dir[dir + '*/'].each(&method(:find_and_replace)) end

viihua avatar Jun 02 '22 14:06 viihua