Vue數(shù)字相加、相減精度丟失處理3種方法
方法 一:
// num 是數(shù)值,decimals是精度幾位
function round(num, decimals) {
const factor = Math.pow(10, decimals);
return Math.round(num * factor) / factor;
}
const a = 0.1;
const b = 0.2;
console.log(round(a + b, 1)); // 0.3方法 二:
//可以傳你要的小數(shù)幾位 let num = 2 const a = 0.1; const b = 0.2; console.log((a+b).toFixed(num)); // 0.30
方法 三:
擴大運算范圍:將浮點數(shù)轉化為整數(shù),相乘或相加后再除回去,可以避免小數(shù)位精度的影響。
let num1 = 0.1; let num2 = 0.2; let sum = (num1 * 10 + num2 * 10) / 10; console.log(sum); // 0.3
最后就是使用第三方庫:例如 decimal.js、big.js 等第三方庫可以提供更高精度的浮點數(shù)運算。
附:Vue處理超過16位數(shù)字精度丟失問題(數(shù)字最后兩位變0)
現(xiàn)象:
當我們使用MyBatis-Plus 使用 ASSIGN_ID(雪花算法) 生成的id作為主鍵時,因為其長度為19位,而前端一般能處理16位,如果不處理的話在前端會造成精度丟失,最后兩位會變成00,感覺像是四舍五入后的效果,如下:
1648981853080055810 => 1648981853080055800
后端處理
@JsonSerialize(using = ToStringSerializer.class) @TableId(type = IdType.ASSIGN_ID) private Long id;
前端處理
前端一般都是用axios進行數(shù)據請求,我們通過引入json-bigint來解決:
// 安裝依賴
npm install json-bigint
// 使用
import JSONBIG from 'json-bigint'
axios.defaults.transformResponse = [
function (data) {
const json = JSONBIG({
storeAsString: true
})
const res = json.parse(data)
return res
}
]總結
到此這篇關于Vue數(shù)字相加、相減精度丟失處理3種方法的文章就介紹到這了,更多相關Vue數(shù)字相加相減精度丟失內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Vue.js + Nuxt.js 項目中使用 Vee-validate 表單校驗
vee-validate 是為 Vue.js 量身打造的表單校驗框架,允許您校驗輸入的內容并顯示對應的錯誤提示信息。這篇文章給大家?guī)砹薞ue.js 使用 Vee-validate 實現(xiàn)表單校驗的相關知識,感興趣的朋友一起看看吧2019-04-04

