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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 第一印象 中级黑马   /  2013-10-19 11:44  /  2525 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

一直在想,既然float,double类型在运算的时候会损失精度,而BigDecimal不会,那我们所有的表示浮点类型的都用BigDecimal不就完了吗?为什么还要用float和double类型呢,这三者都什么时候用,哪位高手能详细解答一下吗?

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1

查看全部评分

3 个回复

倒序浏览

回帖奖励 +3

我看了下 BigDecimal的 源码带注释是3856行,没看过一个Bigdecimal的对象用流输出到文件的大小,我想如果所有的浮点数都用这个对象表示的话,那么应用程序机器臃肿,毕竟一个double再多才占8个字节,那么一个BigDecimal对象占多少字节就没人知道了,毕竟没有像C语言那样的sizeOf 运算符让咱们用,还有java中有strictfp关键字来封装方法和类,使浮点数计算更为精确。但是具体原理,自己也没看过虚拟机。。。。不过我想这比BigDecimal的内存使用少的多了。。。

评分

参与人数 1技术分 +1 收起 理由
狼王 + 1 赞一个!

查看全部评分

回复 使用道具 举报
如果我们要做一个加法运算,需要先将两个浮点数转为String,然后够造成BigDecimal,在其中一个上调用add方法,传入另一个作为参数,然后把运算的结果(BigDecimal)再转换为浮点数。很繁琐
回复 使用道具 举报
龏鈊づ廱鵆ぐ 发表于 2013-10-19 17:27
如果我们要做一个加法运算,需要先将两个浮点数转为String,然后够造成BigDecimal,在其中一个上调用add方 ...

繁琐倒是有点,不过能提供精确的结果,这也算是个区别吧,但是这种繁琐,我们可以将BigDecimal中我们需要用到的方法封装到我们自己的类中,然后用的时候用我们自己封装的类来运算就不烦所了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马