app.js:
data:{
earnings_all:8.45,
earnings:1.1,
}
app.wxml:
{{earnings_all + earnings}}得出的结果为9.54999999999
/**
* 小数计算
* Number 范围: 最小:5e-324 最大:1.7976931348623157e+308
* 运算时 小数位 + 整数位不超过 308/4 = 77位则运算是安全的,不用考虑范围问题
*/
module.exports = {
init: init
}
/**
* 获取小数位数
*/
function digitNum(strNum1) {
var dig = 0;
if (strNum1.indexOf(".") >= 0) {
dig = strNum1.split(".")[1].length;
}
return dig;
}
/**
* 数据放大相同倍数,使得两个数都是整数
* 返回: 放大后的数1,数2,放大倍数
*/
function numEnlarge(num1, num2) {
var strNum1 = num1.toString();
var strNum2 = num2.toString();
var r1 = digitNum(strNum1);
var r2 = digitNum(strNum2);
if (r1 == 0 && r2 == 0) {
//整数运算
return [Number(strNum1), Number(strNum2), 1]
}
var intNum1 = Number(strNum1.replace(".", “”));
var intNum2 = Number(strNum2.replace(".", “”));
if (r1 > r2) {
intNum2 = intNum2 * Math.pow(10, r1 - r2)
} else if (r1 < r2) {
intNum1 = intNum1 * Math.pow(10, r2 - r1)
} else {
///r1==r2
}
return [intNum1, intNum2, Math.pow(10, Math.max(r1, r2))]
}
function init(){
// 数据加
Number.prototype.add=function(num2){
var nums = numEnlarge(this, num2)
return (nums[0] + nums[1]) / nums[2]
}
// 数据减
Number.prototype.subtract = function (num2) {
var nums = numEnlarge(this, num2)
return (nums[0] - nums[1]) / nums[2]
}
// 数据乘
Number.prototype.multiply = function (num2) {
var nums = numEnlarge(this, num2)
return (nums[0] * nums[1]) / (nums[2] * nums[2])
}
// 数据除
Number.prototype.divide = function (num2) {
var nums = numEnlarge(this, num2)
return nums[0] / nums[1]
}
}