Java中BigDecimal类的简单用法
本文实例讲述了Java中BigDecimal类的简单用法,是Java程序设计中非常实用的技巧,分享给大家供大家参考。具体用法分析如下:
一般来说,一提到Java里面的商业计算,我们都知道不能用float和double,因为他们无法进行精确计算。但是Java的设计者给编程人员提供了一个很有用的类BigDecimal,他可以完善float和double类无法进行精确计算的缺憾。BigDecimal类位于java.maths类包下。首先我们来看下如何构造一个BigDecimal对象。它的构造函数很多,这里挑选最常用的两个来演示一下:一个就是BigDecimal(doubleval),另一个就是BigDecimal(Stringstr)。这两个看上去没什么太大区别,但是正像API描述中说的那样:
/*Theresultsofthisconstructorcanbesomewhatunpredictable.Onemightassumethat newBigDecimal(.1)isexactlyequalto.1,butitisactuallyequal to.1000000000000000055511151231257827021181583404541015625.Thisissobecause.1 cannotberepresentedexactlyasadouble(or,forthatmatter,asabinaryfraction ofanyfinitelength).Thus,thelongvaluethatisbeingpassedintotheconstructor isnotexactlyequalto.1,appearancesnonwithstanding. The(String)constructor,ontheotherhand,isperfectlypredictable:newBigDecimal (".1")isexactlyequalto.1,asonewouldexpect.Therefore,itisgenerally recommendedthatthe(String)constructorbeusedinpreferencetothisone.*/
也就是说利用double作为参数的构造函数,无法精确构造一个BigDecimal对象,需要自己指定一个上下文的环境,也就是指定精确位。而利用String对象作为参数传入的构造函数能精确的构造出一个BigDecimal对象。请看下面的代码:
importjava.math.*; publicclassTestBigDecimal{ publicstaticvoidmain(Stringargs[]){ BigDecimalbd=newBigDecimal("10.123"); BigDecimalbd1=newBigDecimal(10.123); System.out.println(bd+"/n"+bd1); } }
运行后输出:
10.123
10.1229999999999993320898283855058252811431884765625
所以我们在选择构造函数时,要看具体需求而定。
另外,很多人会问到怎么将基本类型,如int,float,double,long,和BigDecimal对象相互转换。很简单:
基本类型通过构造函数转换成对应的BigDecimal对象,而BigDecimal类提供了诸如intValue(),floatValue(),doubleValue(),longValue()方法来将BigDecimal对象转换成对应的值。
关于BigDecimal是如何计算的,我以论坛中一个人的提问帖子为例,来简单的写出BigDecimal的运算方法。题目是:李白无事街上走,提壶去买酒。遇店加一倍,见花喝一斗,五遇花和店,喝光壶中酒,试问李白壶中原有多少斗酒?
这道题应该是从后往前推,并且要逆运算,最后得出原有酒的体积。
importjava.math.*; publicclassLibai{ publicstaticvoidmain(Stringargs[]){ BigDecimalvolumn=newBigDecimal("0"); for(inti=0;i<5;i++){ volumn=volumn.add(newBigDecimal("1")); volumn=volumn.divide(newBigDecimal("2")); } System.out.print(volumn); } }
运行结果:
0.96875
希望本文所述对大家Java程序设计的学习有所帮助。
相关文章
- java random函数原理_详解JAVA中Random()函数的用法
- java 卸载工具_java卸载工具下载
- java list去重_JAVA基础-List去重的6种方式[通俗易懂]
- java简单的除法运算_Java除法运算的陷阱[通俗易懂]
- java 开发中 dom4j的简单用法「建议收藏」
- java语言的特点_Java语言有什么特点?
- java启动器_JAVA基础:Java 启动器如何查找类
- java笛卡尔积算法_Java 笛卡尔积算法的简单实现
- java——数组的拷贝
- JAVAdebug_java如何设置断点
- JAVA为啥要用stream流处理_java哪个部分最难学
- Java中的VO,BO,PO,DO,DTO
- Java中的注解,自定义注解
- Blowfish 加密算法 Java 版简单实现详解编程语言
- Java经典实例:实现一个简单堆栈详解编程语言
- 数据如何使用Java读取MySQL数据(java读取mysql)
- Java封装MySQL让编程更简单(java封装mysql)
- Java监控Oracle性能的最佳实践(java监控oracle)
- MySQL与Java的无缝互联(java与mysql连接)
- 客户端建立Redis集群:Java客户端指南(redis集群java)
- 策略Java中使用Redis实现过期策略(redisjava过期)
- 使用Java连接MySQL实现查询功能(java连接mysql查询)
- 使用Java远程控制Linux 实现简单、高效的服务器管理(java控制linux)
- Java开发与Linux运维的高效协作(java与linux运维)
- Linux 下安装Java:快速从零开始(linux 下载java)
- Java搭配MySQL,实现创新跳跃的可能(java 与mysql)
- Java数据库之MySQL学习使用教程(mysql中java教程)
- Oracle收购了Java一个伟大的转折点(java被oracle吗)
- JAVA+Struts2获取服务器地址的方法