注意项
- 所有含浮点数的裸加减乘除都有可能触发精度问题;如0.1+0.2;4100.065 * 100
具体实现
1. 乘法:
function mul(a,b){
let c = 0,
d = a.toString(),
e = b.toString();
try {
c += d.split(".")[1].length;
} catch (f) {}
try {
c += e.split(".")[1].length;
} catch (f) {}
return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
}
2. 加法
function add(a,b){
let c, d, e;
try {
c = a.toString().split(".")[1].length;
} catch (f) {
c = 0;
}
try {
d = b.toString().split(".")[1].length;
} catch (f) {
d = 0;
}
e = Math.pow(10, Math.max(c, d));
return (mul(a, e) + mul(b, e)) / e;
}
3. 减法
function sub(a, b) {
let c, d, e;
try {
c = a.toString().split(".")[1].length;
} catch (f) {
c = 0;
}
try {
d = b.toString().split(".")[1].length;
} catch (f) {
d = 0;
}
e = Math.pow(10, Math.max(c, d));
return (mul(a, e) - mul(b, e)) / e;
}
4. 除法
function divide(a, b) {
var c, d, e = 0,
f = 0;
try {
e = a.toString().split(".")[1].length;
} catch (g) {
e = 0;
}
try {
f = b.toString().split(".")[1].length;
} catch (g) {
f = 0;
}
c = Number(a.toString().replace(".", ""));
d = Number(b.toString().replace(".", ""));
return mul(c / d, Math.pow(10, f - e));
}
5. 浮点数四舍五入,保留固定小数位(不参加运算,纯展示)
function round(num, precision) {
const base = Math.pow(10, precision)
return (Math.round((num.toPrecision(17) * base).toFixed(1)) / base).toFixed(precision)
}
todo 升级版
- 考虑写成科里化形式 待做
- 考虑大数情况 待做
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。