收藏
回答

小程序计算含小数时出现错误

问题模块
API和组件

app.js:

data:{

    earnings_all:8.45,

    earnings:1.1,

}

app.wxml:

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

最后一次编辑于  2017-03-02  (未经腾讯允许,不得转载)
邀请回答
复制链接收藏关注问题回答

5 个回答

  • DireWolf
    DireWolf
    2018-02-27

    /**

    *  小数计算

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

    }

    }



    2018-02-27
    赞同 11
    回复
  • Tïedào
    Tïedào
    2017-03-02

    四舍五入呀

    2017-03-02
    赞同
    回复
  • lll
    lll
    2017-03-02

    浮点误差.


    JavaScript 就是这样.

    2017-03-02
    赞同
    回复
  • 前端-王国花
    前端-王国花
    2017-03-03

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

    2017-03-03
    赞同
    回复
  • 萝卜
    萝卜
    2017-04-06

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

    2017-04-06
    赞同
    回复