js将后台返回的小数转换成百分比,直接*100的操作有误?

问题描述

需要使用js将后台返回的小数转换成百分比,我当时是直接在js里将这个数值*100,但是结果却有问题。

如图:

clipboard.png

我试过0.48显示没有问题,但是0.55以及之后的数值却有问题,

如图:

clipboard.png

求问,我该怎么让这些数值正常显示。

阅读 8.1k
5 个回答
function accMul(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);
}
accMul(xx,100)

先调用js乘法精度方法,toFixed个人感觉不可取,数据有0.54567这种就不准确了。
图片描述

求助,问题很急,求大神帮忙

试下这个 item.paid_rate = (Math.min(item.paid_rate, 1) * 100).toFixed(0)

clipboard.png
一般做乘法,都是用toFixed函数,直接乘会有问题。

计算机编程语言里浮点数计算会存在精度丢失问题(或称舍入误差),其根本原因是二进制和实现位数限制有些数无法有限表示
以下是十进制小数对应的二进制表示

   0.1 >> 0.0001 1001 1001 1001…(1001无限循环)
   0.2 >> 0.0011 0011 0011 0011…(0011无限循环)

计算机里每种数据类型的存储是一个有限宽度,比如 JavaScript 使用 64 位存储数字类型,因此超出的会舍去。舍去的部分就是精度丢失的部分。

一般将其换成对应的整数在进行运算。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏