var num = "0.01";
var num_arr = num.split(".");
var num_arr2 = num_arr[1];
0.1+0.2=0.3000000000000004
1.001*1000=1000.9999999999999;
小数运算丢失精度问题的解决办法:
前两种都有缺陷(第一种丢失精度,第二种可能出现超出整数上限的值)
.indexOf() 在原来的字符串中搜索一个特定的字符串
.replace() 字符串的替换方法
用第二种方式实现的代码
<script type = "text/javascript">
//1.01+1.001
function add(num1+num2){
//将数字转换成字符串
num1=num1.toString();
num2= num2.toString();
//获取小数点的位置
var index1 = num1.indexOf(".");
var index2 = num2.indexOf(".");
//如果小数点存在,那么就在获取各自的小数点位数
var ws1 = 0;
var ws2 = 0;
if(index1 != -1){
ws1 = num1.split(".")[1].length;
}
if(index2 != -1){
ws2 = num2.split(".")[1].length;
}
//看看谁的小数数位大,谁的小数数位小
var bigger = (ws1 > ws2)?ws1:ws2;
var smaller= (ws1 < ws2)?ws1:ws2;
//计算得到的需要补齐的0的个数
var zerosCount = bigger-smaller;
//好了,现在不管三七二十一,全部去除小数点
num1 = num1.replace(".","");
num2 = num2.replace(".","");
//比较num1和num2谁大,比较的方法就是看谁是smaller,是smaller的一方就补0
if(ws1 == smaller){
for(var i =0; i <zerosCount; i++){
num1 += "0";
}
}else{
for(var i =0; i <zerosCount; i++){
num2 += "0";
}
}
//开始计算
var sum = parseInt(num1) +parseInt(num2);
//根据较大的小数位数计算倍数
var beishu = 1;
for(var 1=0;i<bigger;i++){
beishu = beishu*10;
}
sum = sum / beishu;
return sum;
}
alert(add(1.001,2.002));
</script>