数值计算中的精度问题

       最近发现项目的代码有一些非常无语的问题,其中一个最恶心的就是这个计算精度的问题,闲话不说,先来看两段代码:

       精度问题之js:

        function test(){

                  a = 10 ;

                  b = 9.03;
 c = a - b;
}

       这段代码的运行结果是0.9700000000000006,而不是我们想得到的0.97。

       精度问题之java:

        public void test(){

                int i = 10;

                double d1 = 9.03d;
double d = i-d1;
System.out.println(d);
}

       这段代码的运行结果依然是0.9700000000000006。

       具体原因楼主就不做解释了,大家百度。大多数语言都存在这种问题,计算整型没事,计算浮点型就不能由着编程语言的性子来了,咱们就得多做点事情。

       之前遇到的这种问题解决思路主要有两个,一个是比较简单的限制精度,另一个是计算的数值同时扩大10的N次方倍(就像上面可以扩大100倍),然后再计算,计算完之后再除以相同的倍数。

       还是看一段简单的代码       

        function test(){

                  a = 10 ;

                  b = 9.03;
  c = (a*100 - b*100)/100;  //同时扩大100倍

                  c = (a-b).toFixed(2);        //限制精度
}


                

        public void test(){

                int i = 10;

                double d1 = 9.03d;
double d ;
d = Double.parseDouble(new DecimalFormat("0.00").format(d)));//限定精度

                d = (i*100-d1*100)/100;                                                            //同时扩大100倍
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值