java中使用bigdecimal进行浮点数精确计算、超大整数、浮点数等计算没有数位限制

java中使用bigdecimal进行浮点数精确计算、超大整数、浮点数等计算没有数位限制

ID:8920810

大小:43.00 KB

页数:8页

时间:2018-04-12

java中使用bigdecimal进行浮点数精确计算、超大整数、浮点数等计算没有数位限制_第1页
java中使用bigdecimal进行浮点数精确计算、超大整数、浮点数等计算没有数位限制_第2页
java中使用bigdecimal进行浮点数精确计算、超大整数、浮点数等计算没有数位限制_第3页
java中使用bigdecimal进行浮点数精确计算、超大整数、浮点数等计算没有数位限制_第4页
java中使用bigdecimal进行浮点数精确计算、超大整数、浮点数等计算没有数位限制_第5页
资源描述:

《java中使用bigdecimal进行浮点数精确计算、超大整数、浮点数等计算没有数位限制》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库

1、(注:前面写了一个超大整数相加的类,参见:超大整数相加,超过了long的范围,你要怎么做!,后来有朋友评论说BigDecimal可以完全实现我的这这个功能,刚开始的时候,我还不服气,据我所知那里有这样的类哦,后来报着说服他的心理去找了一下,呵呵,结果居然自己被说服了,确实有这么一回事,利用BigDecimal操作超大整数一样,也是先把要操作的数据转换为字符串型。使用BigDecimal可以进行高精度的工程运算,就不会计算中的精度发愁了,感谢原作者。)转自:http://chongtianpig.netbei.com/51976.shtmlJ

2、ava浮点数精确计算BigDecimal的用法java.math.BigDecimal的用法?Java浮点数精确计算如果我们编译运行下面这个程序会看到什么?publicclassTest{publicstaticvoidmain(Stringargs[]){System.out.println(0.05+0.01);System.out.println(1.0-0.42);System.out.println(4.015*100);System.out.println(123.3/100);}};你没有看错!结果确实是0.060000000

3、0000000050.5800000000000001401.499999999999941.2329999999999999Java中的简单浮点数类型float和double不能够进行运算。不光是Java,在其它很多编程语言中也有这样的问题。在大多数情况下,计算的结果是准确的,但是多试几次(可以做一个循环)就可以试出类似上面的错误。现在终于理解为什么要有BCD码了。这个问题相当严重,如果你有9.999999999999元,你的计算机是不会认为你可以购买10元的商品的。在有的编程语言中提供了专门的货币类型来处理这种情况,但是Java没有。现

4、在让我们看看如何解决这个问题。四舍五入我们的第一个反应是做四舍五入。Math类中的round方法不能设置保留几位小数,我们只能象这样(保留两位):publicdoubleround(doublevalue){returnMath.round(value*100)/100.0;}非常不幸,上面的代码并不能正常工作,给这个方法传入4.015它将返回4.01而不是4.02,如我们在上面看到的4.015*100=401.49999999999994因此如果我们要做到精确的四舍五入,不能利用简单类型做任何运算java.text.DecimalForm

5、at也不能解决这个问题:System.out.println(newjava.text.DecimalFormat("0.00").format(4.025));输出是4.02BigDecimal在《EffectiveJava》这本书中也提到这个原则,float和double只能用来做科学计算或者是工程计算,在商业计算中我们要用java.math.BigDecimal。BigDecimal一共有4个够造方法,我们不关心用BigInteger来够造的那两个,那么还有两个,它们是:BigDecimal(doubleval)Translatesa

6、doubleintoaBigDecimal.BigDecimal(Stringval)TranslatestheStringrepresentationofaBigDecimalintoaBigDecimal.上面的API简要描述相当的明确,而且通常情况下,上面的那一个使用起来要方便一些。我们可能想都不想就用上了,会有什么问题呢?等到出了问题的时候,才发现上面哪个够造方法的详细说明中有这么一段:Note:theresultsofthisconstructorcanbesomewhatunpredictable.Onemightassumet

7、hatnewBigDecimal(.1)isexactlyequalto.1,butitisactuallyequalto.1000000000000000055511151231257827021181583404541015625.Thisissobecause.1cannotberepresentedexactlyasadouble(or,forthatmatter,asabinaryfractionofanyfinitelength).Thus,thelongvaluethatisbeingpassedintotheconstruc

8、torisnotexactlyequalto.1,appearancesnonwithstanding.The(String)constructor,ontheotherhand

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。