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这个小数,所以在实际存储时候,
只能是保留有限小数多少位,导致了误差;