JS 精度差异 0.1+0.2 != 0.3

数字乘以 10 的 n 次幂,换算成计算机能够精确识别的整数,然后再除以 10 的 n 次幂来处理

JS精度

console.log(0.1+0.2)
// 0.30000000000000004

计算

    var x = 4.23323;//测试的数字
    var y = String(x).indexOf(".") + 1;//获取小数点的位置
    var count = String(x).length - y;//获取小数点后的个数

题目

求 a 和 b 相乘的值,a 和 b 可能是小数,需要注意结果的精度问题
输入

3, 0.0001

输出

0.0003

思路

  1. 先将其转换成字符串
  2. 根据小数点的位置确定小数位数
  3. 依据位数取高精度值
  4. 用toFixed()函数确定结果小数位

方案

function multiply(a, b) {
    var stra=a.toString();
    var strb=b.toString();
    var len=Math.max(stra.length-stra.indexOf('.')-1,strb.length-strb.indexOf('.')-1);
    // 求两个数中精度大的一个
    return parseFloat(a*b).toFixed(len);
}
本作品采用《CC 协议》,转载必须注明作者和本文链接
pardon110
讨论数量: 1
自由与温暖是遥不可及的梦想

很多语言 计算都不精确的。计算价格之类的的时候会出现问题。 价格 百分比之类的。 我以前百度过

3年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!
开发者 @ 社科大
文章
134
粉丝
24
喜欢
101
收藏
55
排名:106
访问:8.9 万
私信
所有博文
社区赞助商