问题: 加减乘除的精度不准确
解决方案/思路:
先将小数转换成整数, 计算后的整数再转换成小数
// 获取小数点后的位数
var trs = function(num){
var str = num.toString();
var point = str.indexOf('.');
var pow = str.length - point - 1;
return Math.pow(10, pow);
}
// 两数相加
var add = function(a, b) {
var m1 = trs(a), m2 = trs(b);
var k = m1 > m2 ? m1 : m2;
return (a*k + b*k) / k;
}
var p1 = add(0.1, 0.2);
console.log(p1); // 0.3
// 两数相减
var minus = function(a, b) {
var m1 = trs(a), m2 = trs(b);
var k = m1 > m2 ? m1 : m2;
return (a*k - b*k) / k;
}
var p2 = minus(0.3, 0.2);
console.log(p2); // 0.1
// 两数相乘
var multiply = function(a, b) {
var m1 = trs(a), m2 = trs(b);
var k = m1 > m2 ? m1 : m2;
return (a*k * b*k) / (k * k);
}
var p3 = multiply(3, 0.7);
console.log(p3); // 2.1
// 两数相除
var divide = function(a, b) {
var m1 = trs(a), m2 = trs(b);
var k = m1 > m2 ? m1 : m2;
return (a*k / b*k) / (k * k);
}
var p4 = divide(0.3, 0.2);
console.log(p4); // 1.5
运行结果: