因为js中,二进制无法有限表示位数,所以导致精度缺失。有很多的方法,我在项目中尝试过乘100计算后再除100等处理方法,但是这些方法,还是存在精度缺失问题。懒人可以使用第三方的库实现,例如mathjs。//utils.js import { create,all } from 'mathjs' const math = create(all,{ epsilon: 1e-12, matrix: 'Matrix', number: 'BigNumber', precision: 64, predictable: false, randomSeed: null }) export const compute = express => { try{ return Number(math.format(math.evaluate(express))) } catch(err) { return NaN } }直接以字符串方式使用:import {compute} from '@/utils' let a = 0.1; let b = 0.2; console.log(a+b)//0.30000000000000004 let result = compute(`${a}+${b}`).toFixed(2) console.log(result)//0.30
如果只是保留两位小数,并且四舍五入,Number(num.toFixed(2))就可以。只是截取的话,就parseInt(num*100)/100,不过浮点数要考虑运算的误差问题,需要用三方库或者自定义方法解决。看你具体要求。
因为js中,二进制无法有限表示位数,所以导致精度缺失。有很多的方法,我在项目中尝试过乘100计算后再除100等处理方法,但是这些方法,还是存在精度缺失问题。懒人可以使用第三方的库实现,例如mathjs。
直接以字符串方式使用: