java中除法结果不对

      java程序中经常会遇到使用double类型来进行运算,今天遇一个非常简单地计算,计算结果居然是不对0,查了一些前辈们的资料动手实验了一下,实验结果和代码分享给大家。需要计算的公式:(7/10)*0.8 结果居然不是0.56 而是 0

最后找到原因(7/10)*0.8 这个公式中 问题出在7/10 两个整数相除,结果只取整数部分所以 7.10的结果是0 所以导致整个计算结果不对。实验结果中还可以看到double类型的精度丢失问题,这个不在这里讨论,百度一下就知道原因了。

代码如下:

 public static void main(String[] args) {


      System.out.println("问题:"+(7/10)*0.8);

      double money = (7/10)*0.8;
      System.out.println("精度缺失1:"+money);

      double money1 = 0.7*0.8;
      System.out.println("精度缺失2:"+money1);

      double temp = 7;
      double money2 = (temp/10)*0.8;
      System.out.println("精度缺失3:"+money2);

      double temp1 = 10;
      double money3 = (7/temp1)*0.8;
      System.out.println("精度缺失3:"+money3);

      //两个整数相除
      System.out.println("关键的问题1:"+7/10);

      //两个整数相除
      System.out.println("关键的问题2:"+19/10);

      //两个整数相除
      System.out.println("关键的问题3:"+12/10);

   }
输出的结果如下:

问题:0.0
精度缺失1:0.0
精度缺失2:0.5599999999999999
精度缺失3:0.5599999999999999
精度缺失3:0.5599999999999999
关键的问题1:0
关键的问题2:1
关键的问题3:1

 

相关文章

Java中的String是不可变对象 在面向对象及函数编程语言中,不...
String, StringBuffer 和 StringBuilder 可变性 String不可变...
序列化:把对象转换为字节序列的过程称为对象的序列化. 反序...
先说结论,是对象!可以继续往下看 数组是不是对象 什么是对...
为什么浮点数 float 或 double 运算的时候会有精度丢失的风险...
面试题引入 这里引申出一个经典问题,看下面代码 Integer a ...