最近出現(xiàn)一個(gè)第一次見到的奇怪現(xiàn)象,屬性戰(zhàn)斗力計(jì)算流程是我開發(fā)的,后來另一個(gè)同學(xué)的某個(gè)業(yè)務(wù)需要算這個(gè)數(shù)值惶傻,然后發(fā)現(xiàn)某幾個(gè)對象算出來的值不對,該同學(xué)看了下代碼其障,看了下原始配表银室,都沒問題,后來找到我励翼,讓我?guī)兔?..
因?yàn)槭遣糠终_蜈敢,部分不對,即不對的部分的某一步驟出現(xiàn)問題導(dǎo)致期望的數(shù)值不符合汽抚,值為NaN而非某一個(gè)具體的數(shù)值扶认;當(dāng)某個(gè)數(shù)組中都為number時(shí)[number, number, ..., number],算出來的值是沒問題的殊橙,如果某一項(xiàng)為空辐宾,即取不到則算出來是NaN,所以可以從這里下手...
因?yàn)閰⑴c屬性計(jì)算的流程比較復(fù)雜膨蛮,但最終是算出各屬性值叠纹,所以可以從某個(gè)屬性字段為空來排查;既然是部分有問題敞葛,且參與計(jì)算的對象數(shù)據(jù)都沒問題誉察,可以從原始配表數(shù)據(jù)排查...
從轉(zhuǎn)過原始表后的配表數(shù)據(jù)看,是少了某一項(xiàng)參與計(jì)算的屬性值惹谐,然后我本地導(dǎo)一下原始表持偏,發(fā)現(xiàn)有異常,但此異常被后面的日志給滾動(dòng)掉氨肌,且不大容易去發(fā)現(xiàn)問題鸿秆,所以問題就出現(xiàn)在這,表格是excel且該列的類型是int....
后來檢查原始表怎囚,直觀上看卿叽,策劃配置的數(shù)值是沒問題的,非常正確,但導(dǎo)表時(shí)考婴,int這列部分正確贩虾,部分不對,異常中提示是數(shù)據(jù)類型不對沥阱,為什么呢缎罢?比如表中填的是30,導(dǎo)出的結(jié)果有30考杉,有30.00000000001或者29.99999999998這樣的數(shù)值策精,故類型不匹配則報(bào)錯(cuò)....
再次檢查原始配表,各項(xiàng)數(shù)據(jù)都沒問題奔则,然后檢查導(dǎo)表工具的源碼蛮寂,也沒問題蔽午,因?yàn)閷?dǎo)表是用go寫的易茬,且對于excel中某個(gè)固定行的某個(gè)列取類型值是int,在處理該列數(shù)據(jù)時(shí)及老,會(huì)使用int32判斷和處理抽莱,因?yàn)榕浔碇谢静粫?huì)出現(xiàn)超過int32的數(shù)值...
工具中并沒有兼容int或者int64,如果配置成前者就不會(huì)報(bào)錯(cuò)骄恶,但最終值導(dǎo)成的配表中是浮點(diǎn)數(shù)食铐,出現(xiàn)游戲數(shù)值錯(cuò)誤僧鲁,不符合預(yù)期,所以這里需要從根本原因解決...
這個(gè)問題蠻奇怪的,因?yàn)槭亲罱懦霈F(xiàn)朗涩,且工具源碼沒動(dòng)過,且對于同樣的數(shù)值,比如30覆履,為何最終會(huì)出現(xiàn)非預(yù)期值硝全?通過手動(dòng)修改有問題的單元格數(shù)值伟众,比如原來為30,手動(dòng)輸入30則導(dǎo)出的數(shù)據(jù)是正確的治泥,不禁開始思考...
因?yàn)榕浔淼谋眍^是程序設(shè)計(jì)的,但數(shù)值是策劃填的准脂,程序很少會(huì)修改數(shù)值添怔,且這個(gè)奇怪的現(xiàn)象最近才出現(xiàn)砾脑,且都跟同一個(gè)策劃同學(xué)修改有關(guān)拦止,所以就開始詢問對方是如何填數(shù)值的...
具體怎么填的就不再細(xì)說,這里只是分享下如何排查這種奇奇怪怪的問題顶瞒,在開發(fā)中要注意一些小異常守问,及時(shí)排除,不然可能很難排查。