收藏
回答

8.88乘以100 存在bug



8.88乘以100 为什么不是等于888呢,是在支付的时候出现的

最后一次编辑于  2018-02-01
回答关注问题邀请回答
收藏

8 个回答

  • 林荣焰
    林荣焰
    2018-02-03

    谢谢大家的提示

    2018-02-03
    赞同
    回复
  • 杨泉
    杨泉
    2018-02-02

    恩,了解了,记住了一个坑,

    2018-02-02
    赞同
    回复
  • NRatel
    NRatel
    2018-02-02

    回复楼上, 用户一般输入单位为元。 服务器为避免浮点数一般单位为分

    2018-02-02
    赞同
    回复
  • 杨泉
    杨泉
    2018-02-02

    价格难道不是后端接口计算么

    怎么会让小程序端去算。。。。

    2018-02-02
    赞同
    回复
  • 达迟
    达迟
    2018-02-02

    这是js浮点精度问题,可以通过引入decimal.js来解决.

    比如Decimal(8.88).mul(Decimal(100)).toFixed(2)

    2018-02-02
    赞同
    回复
  • NRatel
    NRatel
    2018-02-02

    浮点数运算常见问题。 自己重新实现浮点数的 +-*/就行了。 乘法如下


     /**

        ** 加法函数,用来得到精确的浮点数加法结果

        **/

        accAdd: function (arg1, arg2) {

            var r1, r2, m, c;

            try {

                r1 = arg1.toString().split(".")[1].length;

            }

            catch (e) {

                r1 = 0;

            }

            try {

                r2 = arg2.toString().split(".")[1].length;

            }

            catch (e) {

                r2 = 0;

            }

            c = Math.abs(r1 - r2);

            m = Math.pow(10, Math.max(r1, r2));

            if (c > 0) {

                var cm = Math.pow(10, c);

                if (r1 > r2) {

                    arg1 = Number(arg1.toString().replace(".", ""));

                    arg2 = Number(arg2.toString().replace(".", "")) * cm;

                } else {

                    arg1 = Number(arg1.toString().replace(".", "")) * cm;

                    arg2 = Number(arg2.toString().replace(".", ""));

                }

            } else {

                arg1 = Number(arg1.toString().replace(".", ""));

                arg2 = Number(arg2.toString().replace(".", ""));

            }

            return (arg1 + arg2) / m;

        },


        /**

        ** 减法函数,用来得到精确的浮点数减法结果

        **/

        accSub: function (arg1, arg2) {

            var r1, r2, m, n;

            try {

                r1 = arg1.toString().split(".")[1].length;

            }

            catch (e) {

                r1 = 0;

            }

            try {

                r2 = arg2.toString().split(".")[1].length;

            }

            catch (e) {

                r2 = 0;

            }

            m = Math.pow(10, Math.max(r1, r2)); //last modify by deeka //动态控制精度长度

            n = (r1 >= r2) ? r1 : r2;

            return ((arg1 * m - arg2 * m) / m).toFixed(n);

        },


        /**

        ** 乘法函数,用来得到精确的浮点数乘法结果

        **/

        accMul: function (arg1, arg2) {

            var m = 0, s1 = arg1.toString(), s2 = arg2.toString();

            try {

                m += s1.split(".")[1].length;

            }

            catch (e) {

            }

            try {

                m += s2.split(".")[1].length;

            }

            catch (e) {

            }

            return Number(s1.replace(".", "")) * Number(s2.replace(".", "")) / Math.pow(10, m);

        },


        /**

        ** 乘法函数,用来得到精确的浮点数除法结果

        **/

        accDiv: function (arg1, arg2) {

            var t1 = 0, t2 = 0, r1, r2;

            try {

                t1 = arg1.toString().split(".")[1].length;

            }

            catch (e) {

            }

            try {

                t2 = arg2.toString().split(".")[1].length;

            }

            catch (e) {

            }

            r1 = Number(arg1.toString().replace(".", ""));

            r2 = Number(arg2.toString().replace(".", ""));

            return (r1 / r2) * Math.pow(10, t2 - t1);

        },


    2018-02-02
    赞同
    回复
  • HellyW
    HellyW
    2018-02-01

    试试这样处理一下

    Math.floor(8.88 * 100 * 100) / 100


    2018-02-01
    赞同
    回复
  • 鎏嫣宫守护
    鎏嫣宫守护
    2018-02-01

    parseInt


    2018-02-01
    赞同
    回复