黑马程序员技术交流社区

标题: 5.0-4.2竟然不等于0.8怎么办? [打印本页]

作者: 黑马王振宇    时间: 2013-1-4 19:06
标题: 5.0-4.2竟然不等于0.8怎么办?
本帖最后由 舒远 于 2013-1-4 20:36 编辑

public class abc {
  public static void main(String[] args) {
    System.out.println(5.0-4.2==0.8);
  }
}


竟然打印出来的是false,为什么?如果要他们相等用什么方法??
作者: 坚持远方    时间: 2013-1-4 19:21
本帖最后由 坚持远方 于 2013-1-4 20:11 编辑

               hh

作者: 黑马王振宇    时间: 2013-1-4 19:30
坚持远方 发表于 2013-1-4 19:21
因为前面的计算结果是int型的,int是没有小数的,所以你把前面强转一下成double就可以了 ...

哥们你喝了吧呵呵?前面结果是int型?!完全不知道你说什么。。
作者: 何竹冬    时间: 2013-1-4 19:32
你好
5.0-4.0默认是double型的所以计算结果是double型的值0.7999999999999998
所以不等于0.8结果为fasle。
作者: 李奇    时间: 2013-1-4 19:32
这位同学看来你要加强基础知识了啊
我来个图你就知道了啊

QQ截图20130104193226.png (18.66 KB, 下载次数: 61)

QQ截图20130104193226.png

作者: 黑马王振宇    时间: 2013-1-4 19:44
我也知道不相等,那实际开发时候怎么避免呢?假如我有个方法经过无数次double类型计算那误差就会很大了,怎么解决呢?
我超市买东西刷卡,Java开发出来的pos机,卡里有5块钱,刷了4块2,我卡里就剩7毛多,是你你干吗?
作者: 舒远    时间: 2013-1-4 19:54
你可以使用BigDecimal类处理精确的浮点数运算。有些浮点数无法用double精确的表示。
一般实际开发中对于精度非常高要求的项目。应该使用BigDecimal类。具体的你查查文档应该就会用了。还有疑问的话欢迎跟帖!
作者: 坚持远方    时间: 2013-1-4 20:13
小律队员 发表于 2013-1-4 19:30
哥们你喝了吧呵呵?前面结果是int型?!完全不知道你说什么。。

不好意思,学的不太好
作者: 黑马王振宇    时间: 2013-1-4 20:31
舒远 发表于 2013-1-4 19:54
你可以使用BigDecimal类处理精确的浮点数运算。有些浮点数无法用double精确的表示。
一般实际开发中对于精 ...

import java.math.*;
import java.text.*;
public class abc{
  public static void main(String[] args) {
    double a = 5.0;
    double b = 4.2;
    BigDecimal a1 = new BigDecimal(a);//把double转换成BigDecimal类型
   BigDecimal b1 = new BigDecimal(b);
    DecimalFormat df=new DecimalFormat("0.0"); //设置保存精度
   System.out.println(df.format(a1.subtract(b1)));//结果为0.8
  }
}
我只能说版主你太牛x了,刚才查了api文档,用BigDecimal类,结果弄出来了,非常感谢,问题已解决!
作者: 舒远    时间: 2013-1-4 20:35
小律队员 发表于 2013-1-4 20:31
import java.math.*;
import java.text.*;
public class abc{

刚才查文档的过程就是个很好的学习过程。希望继续保持哦。
有时候给你一个思路比直接给你答案会更好。。你说呢:P
作者: 黑马王振宇    时间: 2013-1-4 20:38
舒远 发表于 2013-1-4 20:35
刚才查文档的过程就是个很好的学习过程。希望继续保持哦。
有时候给你一个思路比直接给你答案会更好。。 ...

你说的太对了,哥们受教了,我去!你生日竟然只比我大9天!哎哥们儿有缘啊~哈哈哈
作者: 舒远    时间: 2013-1-4 20:42
小律队员 发表于 2013-1-4 20:38
你说的太对了,哥们受教了,我去!你生日竟然只比我大9天!哎哥们儿有缘啊~哈哈哈 ...

那你应该叫哥呀 :lol




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2