小程序计算含小数时出现错误
发布于 6 年前 作者 yongliang 7886 次浏览 来自 问答

app.js:

data:{

    earnings_all:8.45,

    earnings:1.1,

}

app.wxml:

{{earnings_all + earnings}}得出的结果为9.54999999999

5 回复

恩,用toFixed()四舍五入了。不过这样只能在js里计算出来才能用到页面里。

浮点误差.

JavaScript 就是这样.

/**

*  小数计算

* 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]

}

}

JavaScript 不熟悉的原因不是小程序本身的bug

四舍五入呀

回到顶部