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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 赵崇友 中级黑马   /  2013-5-19 08:05  /  1120 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 赵崇友 于 2013-5-19 13:33 编辑

上代码。
结果是:
-2079214094
1.0307921510400124E11
1.020030100000123E10
8.05281735300123E9
求解释:和我预期得到的结果完全不符。。。
  1. import java.math.BigDecimal;

  2. public class Test1 {

  3.         /**
  4.          * @param args
  5.          */
  6.         public static void main(String[] args) {
  7.                 // TODO Auto-generated method stub
  8.                 BigDecimal bd = new BigDecimal(101000001010.00123);
  9.                 int intPart = bd.intValue();
  10.                 System.out.println(intPart);
  11.                 System.out.println(bd.doubleValue()-intPart);
  12.                 Double db = 10200301000.00123;
  13.                 System.out.println(db);
  14.                 System.out.println(db-db.intValue());
  15.         }

  16. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1 推荐去看看java中关于精度的问题.

查看全部评分

3 个回复

倒序浏览
import java.math.BigDecimal;



public class Test1 {



        public static void main(String[] args) {

           
                BigDecimal bd = new BigDecimal(101000001010.00123);
               // System.out.println(bd.toString());

                int intPart = bd.intValue();
                System.out.println(intPart);
                System.out.println(bd.doubleValue()-intPart);//将丢弃此 BigDecimal 的所有小数部分,并且如果生成的 "BigInteger" 太大而不适合用 int 表示,则仅返回 32 位低位字节。注意,此转换会丢失关于此 BigDecimal 值的总大小和精度的信息,并返回带有相反符号的结果。

                Double db = 10200301000.00123;

               System.out.println(db);

               System.out.println(db-db.intValue());

        }
}

评分

参与人数 1技术分 +1 收起 理由
殇_心。 + 1

查看全部评分

回复 使用道具 举报
学习学习!
回复 使用道具 举报
江南雨 发表于 2013-5-19 08:17
import java.math.BigDecimal;

哦哦哦,有点明白,不是太明白!这是不是向下转型,损失精度了,超过范围就取低位字节,带负号标记。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马