黑马程序员技术交流社区
标题:
精度丢失!
[打印本页]
作者:
SenGoo
时间:
2014-10-22 16:11
标题:
精度丢失!
public class Test
{
public static void main(String[] args)
{
double x = 0.01;
double y = 0.09;
System.out.println(x + y);
}
}
复制代码
输出结果是0.09999999999999999而不是0.1解决方法一:将x,y改为float
public class Test
{
public static void main(String[] args)
{
/*double x = 0.01;
double y = 0.09;*/
float x = (float) 0.01;
float y = (float) 0.09;
System.out.println(x + y);
}
}
复制代码
输出结果为:0.1
如果把x,y分别改为float的0.01和0.04,在相加,
public class Test
{
public static void main(String[] args)
{
/*double x = 0.01;
double y = 0.09;*/
float x = (float) 0.01;
float y = (float) 0.04;
System.out.println(x + y);
}
}
复制代码
结果居然是0.049999997
是否有第二种方法彻底解决这种精度丢失问题!
作者:
紫薰iy
时间:
2014-10-22 19:00
double a = 0.01;
double b = 0.09;
DecimalFormat df = new DecimalFormat("#0.00");
System.out.println(df.format(a+b));
作者:
maralbertlee
时间:
2014-10-22 19:48
浮点十进制值通常没有完全相同的二进制表示形式。 这是 CPU 所采用的浮点数据表示形式的副作用。 为此,可能会经历一些精度丢失,并且一些浮点运算可能会产生意外的结果。
导致此行为的原因是下面之一:
十进制数的二进制表示形式可能不精确。
使用的数字之间类型不匹配(例如,混合使用浮点型和双精度型)。
作者:
xiaochongbojue
时间:
2014-10-22 21:41
楼主可以了解一下 BigDecimal 这个类,用这个的话可以彻底解决问题的
作者:
SenGoo
时间:
2014-10-22 21:46
xiaochongbojue 发表于 2014-10-22 21:41
楼主可以了解一下 BigDecimal 这个类,用这个的话可以彻底解决问题的
我知道这个类!具体的代码你嫩不能给我啊?
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2