日期:2014-05-20  浏览次数:20658 次

Java 数据转换精度损失问题
import   java.util.Scanner;  
public   class   DisplayTime{
public   static   void   main(String[]args){
System.out.println( "enter   an   integer   for   seconds: ");
Scanner   input=new   Scanner(System.in);
int   seconds=input.nextInt();
int   minutes=seconds/60;
int   remain=seconds%60;
System.out.println(seconds+ "seconds   is   "+minutes+ "minutes   is "+remain+ "seconds ");
}
}

如果是System.ou.print(1.0-0.9);这样的浮点数结果不是0.1而是0.099999999.这是怎么回事


------解决方案--------------------
很多小数 计算机无法准确表示的.
比如0.1, 用二进制表示是0.00011001100110011.....
0.2 用二进制表示是0.00110011001100110.....
0.3 用二进制表示是0.01001100110011001.....
0.4 用二进制表示是0.01100110011001100.....
0.5 用二进制表示是0.1
计算机给分配的存储空间是有限的,double是8字节。所以没有办法精准表示。造成上述问题。
------解决方案--------------------
0.1 这个浮点数在计算机存储时候,会有误差, 因为不能用一个准确的二进制数表示0.1
0.1 小数 换成二进制 应是 乘2 取整 这样我们会发现 0.1 0.2 0.4 0.8 0.6 0.2油循环回来了;
无限循环,所以说没有一个准确的二进制数可以表示0.1这个小数,所以在实际存储时候,
只能是保留有限小数多少位,导致了误差;