1.安装
npm install mathjs
2.引入
import * as math from "mathjs"
3.从根本解决javascript 0.1+0.2 的问题
math.bignumber()
这个方法让我决定使用math.js库来解决前端计算精度问题,简直不要太好用,哈哈
接下来让我们看看到底怎么解决的精度计算
console.log(math.bignumber('0.1'));
console.log(math.bignumber('0.2'));
const numadd = math.add(math.bignumber('0.1'), math.bignumber('0.2'));
console.log(numadd);
console.log(numadd.toString());
控制台输出:
看完这个栗子,彻底悟了么宝子们,什么叫从根本解决计算精度问题!
4.使用方法
math.bignumber('x')//数字转换成支持无限精度无限大数的类BigNumber实现
math.sqrt(4) //开方
math.add(a,b) //加
math.subtract(a,b) //减
math.divide(a,b) //除
math.multiply(a,b) //乘
math.pow(a,b) //取数值平方
math.ceil(x) //向上取整:函数返回大于或等于一个给定数字的最小整数
math.Floor(x)//向下取整:返回小于或等于一个给定数字的最大整数
math.round()//四舍五入:函数返回一个数字四舍五入后最接近的整数
math.random()//伪随机数:函数返回一个浮点, 伪随机数在范围 **[0,1)** ,也就是说,从0(包括0)往上,
但是不包括1(排除1),然后您可以缩放到所需的范围。实现将初始种子选择到随机数生成算法;它不能被用户选择或重置
math.abs()//取绝对值:函数返回指定数字 “x“ 的绝对值
math.cbrt()//取数值立方根:函数返回任意数字的立方根
math.max(*value1*[,*value2*, ...])//取最大值:函数返回一组数中的最大值
math.min()//取最小值
math.trunc()//取整数部分:方法会将数字的小数部分去掉,只保留整数部分
5.十六进制转十进制原理
www.rapidtables.com/convert/num…
6.十六进制转十进制实栗
// 16进制数转10进制
private ex16hex(value) {
const valueReplace = value.replace('0x', '');
let arr = valueReplace.split('');
arr = arr.reverse();
let res = math.bignumber('0');
const list = [];
arr.forEach((item, i) => {
const num = this.hex_change(item);
list.push(this.muti16(num, i));
});
res = list.reduce(function (prev, cur) {
return math.add(prev, cur);
});
return res.toString();
}
// 字符转16进制数字
private hex_change(item) {
let res;
switch (item) {
case 'a':
case 'A':
res = 10;
break;
case 'b':
case 'B':
res = 11;
break;
case 'c':
case 'C':
res = 12;
break;
case 'd':
case 'D':
res = 13;
break;
case 'e':
case 'E':
res = 14;
break;
case 'f':
case 'F':
res = 15;
break;
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
res = Number(item);
break;
default:
res = 0;
break;
}
return res;
}
// 返回 v 乘以 n 个 16 的积
private muti16(v, n) {
const pow = math.pow(math.bignumber('16'), math.bignumber(`${n}`));
return math.multiply(math.bignumber(`${v}`), pow);
}