package one;public class ceshi {
  public static void main(String[] args){
  for(int i=1;i<8;i++){
  System.out.println(i*1.1);
  
  }
  }
}怎么从底层解释运行结果?

解决方案 »

  1.   

    我怎么觉得跟浮点数没什么关系呢  应该是个double吧
      

  2.   

    因为double 类型的数据 没有一个准确值。1.1在double类型里面根本就不是1.1。只是一个比较接近1.1的值。究其原因就是因为数据都是2进制存储的。而double 类型就是咱们知道的有小数点的,那转换为2进制的时候就很不准确了。给你举个例子十进制0.00003转换为2进制,你可以试试,反正我是不想算,嘿嘿,无限循环了,最后只能约等于
      

  3.   

    当你乘以1.1的时候,系统就默认这是浮点运算了Java中的简单浮点数类型float和double不能够进行运算。不光是Java,在其它很多编程语言中也有这样的问题。在大多数情况下,计算的结果是准确的,但是多试几次(可以做一个循环)就可以试出类似上面的错误。现在终于理解为什么要有BCD码了。 
    这个问题相当严重,如果你有9.999999999999元,你的计算机是不会认为你可以购买10元的商品的。
    用BigDecimal工具类可以解决以上问题!