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是存在数据丢失现象的

解决办法:

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);
		}
	}

}

结果:

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

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

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

    double d=sca.nextDouble();

结果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值