Jaolkaj 发表于 2017-5-7 09:00:48

Java的Double精度丢掉解决办法

本帖最后由 Jaolkaj 于 2017-5-7 09:01 编辑

论题|开|端|前,我想说一句|无|关|的|论题,也是鼓舞像我相同的初学者
如果有什么简|略|易|懂|的|源|码|或许制品软件,欢迎共享并剖析给我们看,没准你|发|的|一|个|帖|子|被其他人看到恰好让他人收益呢,并且也能股动他人一同互动
我之|前|害怕,不敢发帖,怕被论坛大佬讪笑,可是|我|今|日|看|见|一位同学发的求助帖有我刚学过的东西,可是他的帖子|没|有|剖|析|,我就充任解说员吧,给我们剖析一下

public class text{
      public static void main(String[] args){
      double b=3.0;
      double sum=30000;
      double i=0.1;
      double c=b+i;
      while(i<=0.3){      
                sum=sum+c*360;
                System.out.println(sum);i++;
                }
      }
}咱们能够看出,最起码的不算大错的过错即是类名首字母必须大写并且每行只允许有一条代码,这是标准

我觉得最简单的解决办法即是:

package Qb;

public class Txx {

      public static void main(String[] args) {
               
                double b = 3.0;
                double sum = 30000;
                double q=0.1;
                double c = b + q;
                for (int i = 1;i <= 3;i++) {
                        sum = sum + c*360;
                        System.out.println(sum);
                        q+=0.1;
                        
                }
      }

}运行结果如下:


但是我觉得楼主是不想创建新的变量,所以我又想办法:
package Bb;

import java.text.DecimalFormat;

public class Qe {

      public static void main(String[] args) {
                double b = 3.0;
                double sum = 30000;
                float i = 0.1f;
                double c =b+i;
                while (i <= 0.3) {
                        sum=sum+c*360;
                        DecimalFormat df = new DecimalFormat("0.0");
                        System.out.println(df.format(sum));
                        i += 0.1;
                }
      }

}运转成果如下:


咱们发现,成果不对,由于Double精度丢掉,0.3成为0.30000000000000004   循环条件就不对了,这个我也很无奈啊,等待大牛给一个解决方案,上边那个简略的解决方案也是如此
循环条件只能改成i<0.4才可以正常运转,持续测验吧,这个一望而知,仍是给我们演示一下吧
package Bb;

import java.text.DecimalFormat;

public class Qe {

      public static void main(String[] args) {
                double b = 3.0;
                double sum = 30000;
                float i = 0.1f;
                double c =b+i;
                while (i < 0.4) {
                        sum=sum+c*360;
                        DecimalFormat df = new DecimalFormat("0.0");
                        System.out.println(df.format(sum));
                        i += 0.1;
                }
      }

}






一笑尘缘了丶 发表于 2017-5-8 01:36:04

没想到我刚在吾爱发的帖子,就被你盗到挂海原文地址:http://www.52pojie.cn/forum.php?mod=viewthread&tid=606006&mobile=2
页: [1]
查看完整版本: Java的Double精度丢掉解决办法