今天在和 H5 交互的時(shí)候,發(fā)現(xiàn)一個(gè)奇怪的問題,當(dāng)我把字符串格式的帶參方法傳給前端時(shí),數(shù)字參數(shù)的最后一位數(shù)字會(huì)發(fā)生改變。
NSString *jsMothod=[NSString stringWithFormat:@"build_visitor_group(%@)",theGroup.groudID];
[self.rootViewController.wc.webView evaluateJavaScript:jsMothod completionHandler:nil];
以上代碼中,theGroup.groudID 為 15066676292965107。
但是傳給前端的時(shí)候,參數(shù)會(huì)自動(dòng)變成 15066676292965108。

IMG_2746(20170930-092748).jpg
這個(gè)彈窗是 H5 給我發(fā)的,可以看到,尾數(shù)為7的數(shù)字參數(shù)到了前端就變化成了8。
后來我在參數(shù)兩側(cè)加了雙引號(hào),就解決了在和H5交互的過程中數(shù)字發(fā)生變化的問題了。
NSString *jsMothod=[NSString stringWithFormat:@"build_visitor_group(\"%@\")",theGroup.groudID];
[self.rootViewController.wc.webView evaluateJavaScript:jsMothod completionHandler:nil];
因?yàn)榭床坏?evaluateJavaScript 的實(shí)現(xiàn)方法,所以沒辦法判斷問題出在哪。可以猜想是在和 H5 交互的過程中,系統(tǒng)首先將字符串格式的數(shù)字轉(zhuǎn)化成了基礎(chǔ)數(shù)據(jù)類型,再將基礎(chǔ)數(shù)據(jù)類型的數(shù)字傳到前端轉(zhuǎn)化成字符串,從而導(dǎo)致了數(shù)字精度缺失發(fā)生變化。
在數(shù)字兩側(cè)加上雙引號(hào)能夠防止數(shù)字自動(dòng)轉(zhuǎn)換成基礎(chǔ)數(shù)據(jù)類型,強(qiáng)制將其聲明為字符串類型,這樣無論多大的數(shù)字都能夠正確的傳達(dá)了。