欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

JavaScript 数百份自学笔记 - 15

最编程 2024-05-08 08:19:34
...

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>

上一篇: 【图说】飞云楼

下一篇: