A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 波涛 中级黑马   /  2014-5-17 13:29  /  8269 人查看  /  48 人回复  /   2 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 波涛 于 2014-5-18 12:24 编辑
  1. public class MathTest{
  2.         public static void main(String[]args){
  3.           double a = 0.01, b = 0.09;
  4.                 System.out.print(a+b);
  5.         }
  6. }
复制代码


打印的结果为什么是0.09999999999999999而非0.1呢?
我想知道为什么以及double最终是怎么个运算法则?我想精确计算怎么办?

评分

参与人数 1技术分 +1 收起 理由
李小然 + 1 赞一个!勤于思考!

查看全部评分

48 个回复

正序浏览
学习中  
回复 使用道具 举报
长知识了 .,我都没注意到这个
回复 使用道具 举报
xlqx15 来自手机 中级黑马 2015-8-17 00:30:35
47#
学习了,又涨姿势了
回复 使用道具 举报
陈cc 中级黑马 2015-8-15 20:48:40
46#
好犀利的样子!
回复 使用道具 举报
受教,还是不太懂,去百度问问!!
回复 使用道具 举报
长知识了 .,我都没注意到这个
回复 使用道具 举报
学习了好利好
回复 使用道具 举报
zy524488 发表于 2014-5-17 16:43
其实无论是double还是float都会遇到这个问题,就拿float说话,float的0.1二进制形式是001111011 1001100110 ...

        public static void main(String[] args)
        {
                /*double a = 0.01;
                double b = 0.09;
                System.out.println((float)(a+b));*/
               
                float a = 0.01f;
                float b = 0.09f;
                System.out.println((a+b));
        }
输出结果是0.1呀
回复 使用道具 举报
受教了,还没仔细考虑过这个问题
回复 使用道具 举报
还没遇到过这个问题,,提前看看了,嘿嘿
回复 使用道具 举报
dimost 来自手机 中级黑马 2014-12-25 23:01:12
39#
来看看  一楼讲的很精辟
回复 使用道具 举报
lby369 中级黑马 2014-12-23 21:27:39
38#
这个问题我也见过。。
回复 使用道具 举报
dimost 来自手机 中级黑马 2014-12-22 00:03:46
37#
学习中!下来试试
回复 使用道具 举报
还有这种情况啊?
回复 使用道具 举报
Hosing 中级黑马 2014-11-20 19:25:35
35#
杜工 发表于 2014-9-19 12:03
这是个经典的问题。。。。

能解释一下吗?
回复 使用道具 举报
这是个经典的问题。。。。
回复 使用道具 举报
细节问题,受教了
回复 使用道具 举报
GYSWL 中级黑马 2014-8-25 17:38:16
32#
居然的这样的,得好好学习学习了
回复 使用道具 举报
学习学习!
回复 使用道具 举报
123下一页
您需要登录后才可以回帖 登录 | 加入黑马