在Javascript中苍息,獲取到數(shù)字超出長度問題
今天給大家分享的是在Javascript中殉簸,獲取到數(shù)字超出長度問題侧到。
實(shí)戰(zhàn)背景
? ? ? ? 在和web前端API對(duì)接的時(shí)候發(fā)現(xiàn)獲取到的ID和生成的不一致奶浦,導(dǎo)致操作用戶數(shù)據(jù)的時(shí)候一直有問題略就,最后定位到是ID后端數(shù)據(jù)類型和Javascript中的數(shù)據(jù)類型不一致捎迫。
問題原因
????????JavaScript中所有的數(shù)字,無論是整數(shù)還是小數(shù)表牢,其類型均為Number窄绒。在程序內(nèi)部,Number類型的實(shí)質(zhì)是一個(gè)64位的浮點(diǎn)數(shù)崔兴,這與Java中double類型的浮點(diǎn)數(shù)是一致的彰导;因此,JavaScript中所有的數(shù)都是浮點(diǎn)數(shù)敲茄。遵循IEEE 754標(biāo)準(zhǔn)(浮點(diǎn)數(shù)算術(shù)標(biāo)準(zhǔn))位谋,JavaScript所能表示的數(shù)值范圍為正負(fù)1.7976931348623157乘以10的308次方,其最小所能表示的小數(shù)為正負(fù)5乘以10的負(fù)324次方堰燎,這兩個(gè)邊界值可以分別通過訪問Number對(duì)象的MAX_VALUE屬性和MIN_VALUE屬性來獲取掏父。
????????對(duì)于整數(shù),根據(jù)ECMAScript標(biāo)準(zhǔn)的要求爽待,JavaScript能表示并進(jìn)行精確算術(shù)運(yùn)算的整數(shù)范圍為:正負(fù)2的53次方损同,也即從最小值-9007199254740992到最大值+9007199254740992之間的范圍翩腐;對(duì)于超過這個(gè)范圍的整數(shù)鸟款,JavaScript依舊可以進(jìn)行運(yùn)算,但卻不保證運(yùn)算結(jié)果的精度茂卦。值得注意的是何什,對(duì)于整數(shù)的位運(yùn)算(比如移位等操作),JavaScript僅支持32位整型數(shù)等龙,也即從-2147483648到+2147483647之間的
解決方案1
????????數(shù)據(jù)庫設(shè)計(jì)的時(shí)候用varchar(20)处渣,那么會(huì)映射為String類型伶贰,就不會(huì)出現(xiàn)這種問題
解決方案2
????????如果項(xiàng)目已經(jīng)成型并且修改數(shù)據(jù)庫會(huì)造成不可預(yù)料的問題那么可以在User對(duì)象中再增加一個(gè)String類型id映射字段,如下privateLong ????????userId;privateString userIdStr;
????????publicStringgetUserIdStr() {
????????????????returnthis.userId+"";? ??
? ? ? ? ?}
? ? ? ? ? ?publicvoidsetUserIdStr(String userIdStr) {
????????????????this.userIdStr = userIdStr;? ?
? ? ? ? ? ? }
那么和前端交互的時(shí)候可以使用userIdStr字段 因?yàn)槭荢tring 類型的罐栈,規(guī)避掉這個(gè)問題黍衙。