今天在和 H5 交互的时候,发现一个奇怪的问题,当我把字符串格式的带参方法传给前端时,数字参数的最后一位数字会发生改变。
NSString *jsMothod=[NSString stringWithFormat:@"build_visitor_group(%@)",theGroup.groudID];
[self.rootViewController.wc.webView evaluateJavaScript:jsMothod completionHandler:nil];
以上代码中,theGroup.groudID 为 15066676292965107。
但是传给前端的时候,参数会自动变成 15066676292965108。
这个弹窗是 H5 给我发的,可以看到,尾数为7的数字参数到了前端就变化成了8。
后来我在参数两侧加了双引号,就解决了在和H5交互的过程中数字发生变化的问题了。
NSString *jsMothod=[NSString stringWithFormat:@"build_visitor_group(\"%@\")",theGroup.groudID];
[self.rootViewController.wc.webView evaluateJavaScript:jsMothod completionHandler:nil];
因为看不到 evaluateJavaScript 的实现方法,所以没办法判断问题出在哪。可以猜想是在和 H5 交互的过程中,系统首先将字符串格式的数字转化成了基础数据类型,再将基础数据类型的数字传到前端转化成字符串,从而导致了数字精度缺失发生变化。
在数字两侧加上双引号能够防止数字自动转换成基础数据类型,强制将其声明为字符串类型,这样无论多大的数字都能够正确的传达了。