Java float精度丢失问题的解决

之前在进行蓝桥杯赛题训练的时候,有一题涉及到实数,提交以后有一个案例通过不了,检查一看发现是数据精度丢失了,导致最终的结果出错,现记录如下。

首先,让我们来测试一下

测试代码:

import java.util.Scanner;
public class test {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sca=new Scanner(System.in);
		while(true) {
			float f=sca.nextFloat();
			System.out.println(f);
		}
	}
}

结果:Java float精度丢失问题的解决_第1张图片

所以Java是存在数据丢失现象的

解决办法:

import java.util.Scanner;
public class test {
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Scanner sca=new Scanner(System.in);
		while(true) {
			String s=sca.nextLine();
			float f=Float.parseFloat(s);
			double d=Double.parseDouble(s);
			System.out.println("float:"+f);
			System.out.println("double:"+d);
		}
	}

}

结果:

Java float精度丢失问题的解决_第2张图片

所以要保证精度,只能用double进行存储。

备注:当然,直接将输入数据存储为double也是可以的,之前一直没注意到float和double在存储小数精度上的区别。

测试代码(将float换成double):

    double d=sca.nextDouble();

结果:

Java float精度丢失问题的解决_第3张图片

你可能感兴趣的:(Java float精度丢失问题的解决)