当前位置:  编程技术>java/j2ee

Java中BigDecimal类的简单用法

    来源: 互联网  发布时间:2014-11-08

    本文导语:  本文实例讲述了Java中BigDecimal类的简单用法,是Java程序设计中非常实用的技巧,分享给大家供大家参考。具体用法分析如下: 一般来说,一提到Java里面的商业计算,我们都知道不能用float和double,因为他们无法进行精确计算。...

本文实例讲述了Java中BigDecimal类的简单用法,是Java程序设计中非常实用的技巧,分享给大家供大家参考。具体用法分析如下:

一般来说,一提到Java里面的商业计算,我们都知道不能用float和double,因为他们无法进行精确计算。但是Java的设计者给编程人员提供了一个很有用的类BigDecimal,他可以完善float和double类无法进行精确计算的缺憾。BigDecimal类位于java.maths类包下。首先我们来看下如何构造一个BigDecimal对象。它的构造函数很多,这里挑选最常用的两个来演示一下:一个就是BigDecimal(double val),另一个就是BigDecimal(String str)。这两个看上去没什么太大区别,但是正像API描述中说的那样:

/*The results of this constructor can be somewhat unpredictable. One might assume that 
new BigDecimal(.1) is exactly equal to .1, but it is actually equal 
to .1000000000000000055511151231257827021181583404541015625. This is so because .1 
cannot be represented exactly as a double (or, for that matter, as a binary fraction 
of any finite length). Thus, the long value that is being passed in to the constructor 
is not exactly equal to .1, appearances nonwithstanding.
The (String) constructor, on the other hand, is perfectly predictable: new BigDecimal
(".1") is exactly equal to .1, as one would expect. Therefore, it is generally 
recommended that the (String) constructor be used in preference to this one.*/

也就是说利用double作为参数的构造函数,无法精确构造一个BigDecimal对象,需要自己指定一个上下文的环境,也就是指定精确位。而利用String对象作为参数传入的构造函数能精确的构造出一个BigDecimal对象。请看下面的代码:

import java.math.*;
public class TestBigDecimal {
  public static void main(String args[]){
    BigDecimal bd = new BigDecimal("10.123");
    BigDecimal bd1 = new BigDecimal(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的运算方法。题目是:李白无事街上走,提壶去买酒。遇店加一倍,见花喝一斗,五遇花和店,喝光壶中酒,试问李白壶中原有多少斗酒?

这道题应该是从后往前推,并且要逆运算,最后得出原有酒的体积。

import java.math.*;
public class Libai {
  public static void main(String args[]){
    BigDecimal volumn = new BigDecimal("0");
    for (int i=0; i

    
 
 

您可能感兴趣的文章:

  • java map(HashMap TreeMap)用法:初始化,遍历和排序详解
  • 请问:哪里有java所有类包的介绍,用法,及所有类的用途,用法,例子等的书或帮助的下载?
  • 请教java中的assert的用法
  • 原始问题,初学java,大家莫笑:appletviewer用法
  • java的String类用法
  • oracle iis7站长之家
  • java之super关键字用法实例解析
  • Java 1.3有没有类似 MSDN 的电子帮助文档,介绍Java的类库的用法!有的话,哪儿可以Down!(高分求解)
  • 想学JAVA,请问JBUILDER 和 VISUAL J++ 一样么?用法区别大么?谢谢
  • java中Scanner类的简单用法分享
  • (SOS 在线等待,马上给分)Java -D用法问题
  • 请哪位大侠为我作一些开导:Java的Native的用法
  • java之this关键字用法实例分析
  • java之static关键字用法实例解析
  • Java join 线程控制用法
  • 问个低级的问题:在windows里 有 char * strfilename1 =new char[255];strcpy(strfilename1,"C:\finger2.bmp")的用法,在纯java里怎么写
  • 浅析Java中Split函数的用法技巧
  • JAVA心得分享---return语句的用法
  • 请各位java高手谈谈java结合xml的用法,谢谢,来者有分!!
  • java equals函数用法详解
  • java之Object类用法实例
  • java命名空间java.math类bigdecimal的类成员方法: bigdecimal定义及介绍
  • java实现大数加法(BigDecimal)的实例代码
  • java命名空间javax.management.openmbean类simpletype<t>的类成员方法: bigdecimal定义及介绍
  • Java中使用BigDecimal进行浮点数运算
  • java命名空间java.math类bigdecimal的类成员方法: min定义及介绍
  • java命名空间java.math类bigdecimal的类成员方法: max定义及介绍
  • java命名空间java.math类bigdecimal的类成员方法: multiply定义及介绍
  • java命名空间java.math类bigdecimal的类成员方法: subtract定义及介绍
  • java命名空间java.math类bigdecimal的类成员方法: add定义及介绍
  • java命名空间java.math类bigdecimal的类成员方法: abs定义及介绍
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • java命名空间java.sql类types的类成员方法: java_object定义及介绍
  • 我想学JAVA ,是买THINK IN JAVA 还是JAVA2核心技术:卷1 好???
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: imageflavor定义及介绍
  • 请问Java高手,Java的优势在那里??,Java主要适合于开发哪类应用程序
  • java命名空间java.lang.management类managementfactory的类成员方法: getcompilationmxbean定义及介绍
  • 如何将java.util.Date转化为java.sql.Date?数据库中Date类型对应于java的哪个Date呢
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getlibrarypath定义及介绍
  • 谁有电子版的《Java编程思想第二版(Thinking in java second)》和《Java2编程详解(special edition java2)》?得到给分
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getstarttime定义及介绍
  • 本人想学java,请问java程序员的待遇如何,和java主要有几个比较强的方向
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: stringflavor定义及介绍
  • 我对JAVA一窍不通,可惜别人却给我一个Java的project,要我做一个安装程序,请问哪里有JAVA INSTALLER下载,而且我要不要安装java的sdk才能完成此项任务?
  • java命名空间java.security类keystore的类成员方法: getdefaulttype定义及介绍
  • 新年第一天,让我们讨论一下未来一年JAVA的发展趋势! 个人认为,JAVA将主要朝ERP和JAVA手机方面发展!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getclasspath定义及介绍
  • 我想学Java,但不知道Java的实用的开发工具有那些,Java主要用在哪些方面,EJB到底是什么东西??
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javaserializedobjectmimetype定义及介绍
  • redhat7.3下,java程序打印中文直接用java命令执行正常,用crontab执行java命令为乱码
  • java命名空间java.awt.datatransfer类dataflavor的类成员方法: javafilelistflavor定义及介绍
  • 各位学java的朋友,学java的未来是什么,你们学java都用来开发什么项目啊!来者给分!!
  • java命名空间java.lang.management接口runtimemxbean的类成员方法: getvmname定义及介绍
  • 请问java程序中的import为什么有的用java.….*,而有的又用java.….…,有什么区别吗?




  • 特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3