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
思路
- 先将其转换成字符串
- 根据小数点的位置确定小数位数
- 依据位数取高精度值
- 用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 协议》,转载必须注明作者和本文链接
很多语言 计算都不精确的。计算价格之类的的时候会出现问题。 价格 百分比之类的。 我以前百度过