vue項目如何解決數(shù)字計算精度問題
vue項目數(shù)字計算精度問題
js計算精度問題解決步驟
1.進(jìn)入指定項目 終端安裝依賴:
npm install mathjs --save
2.引入依賴包,在需要解決精度問題的頁面引入
mathjs: const math = require(‘mathjs')

使用math.format方法
math.format(a*b,num)
a,b表示需要計算的兩個數(shù),可以進(jìn)行加減乘除平方等等計算
num表示精度,最大為14,表示單一文本框最大的數(shù)字位數(shù),包括小數(shù)點前后,如
如果用戶輸入99.9999(6個9)
- 當(dāng)num為5時,輸入的數(shù)字顯示為99.999
- 當(dāng)num為6時,輸入的數(shù)字顯示為99.9999
- 當(dāng)num大于6時,輸入的數(shù)字顯示為99.9999

vue處理超過16位數(shù)字精度丟失問題
當(dāng)我們使用MyBatis-Plus 使用 ID_WORKER 或者 ASSIGN_ID(雪花算法) 生成的id作為主鍵時,因為其長度,為19位,而前端一般能處理16位,如果不處理的話在前端會造成精度丟失,最后兩位會變成00
如下圖,感覺像是四舍五入后的效果

處理這種問題有兩種方案,要么后端出處理,要么前端處理
后端處理
直接把id類型改為String就行,這樣是可以,但是我們?nèi)绻且肔ong呢?
我們可以給對應(yīng)的實體類主鍵屬性加入注解@JsonSerialize
import com.fasterxml.jackson.databind.annotation.JsonSerialize; import com.fasterxml.jackson.databind.ser.std.ToStringSerializer; @JsonSerialize(using = ToStringSerializer.class) @TableId private Long id;
前端處理
前端一般都是用axios進(jìn)行數(shù)據(jù)請求,我們通過引入json-bigint來解決
yarn add json-bigint //或 npm install json-bigint
在封裝的請求工具類中添加如下代碼即可。
axios.defaults.transformResponse = [
function (data) {
const json = JSONBIG({
storeAsString: true
})
const res = json.parse(data)
return res
}
]
兩種方案皆可。
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
vue3 Element Plus中icon圖標(biāo)不顯示的解決方案
這篇文章主要介紹了vue3 Element Plus中icon圖標(biāo)不顯示的解決方案,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教2024-03-03
Vue.js?的計算屬性和偵聽器詳解(提升數(shù)據(jù)處理與交互的關(guān)鍵工具)
在Vue.js開發(fā)中,計算屬性與偵聽器是極為關(guān)鍵的特性,它們極大地提升了數(shù)據(jù)處理與交互邏輯實現(xiàn)的便捷性和高效性,本文給大家介紹Vue.js?的計算屬性和偵聽器:提升數(shù)據(jù)處理與交互的關(guān)鍵工具,感興趣的朋友一起看看吧2025-04-04
Vue-admin-template?報Uncaught?(in?promise)?error問題及解決
這篇文章主要介紹了Vue-admin-template?報Uncaught?(in?promise)?error問題及解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-07-07

