欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java中BigDecimal類(lèi)的簡(jiǎn)單用法

 更新時(shí)間:2014年09月19日 12:09:25   投稿:shichen2014  
這篇文章主要介紹了Java中BigDecimal類(lèi)的簡(jiǎn)單用法,是Java應(yīng)用程序開(kāi)發(fā)中非常實(shí)用的技巧,本文以實(shí)例形式對(duì)此進(jìn)行了簡(jiǎn)單的分析,需要的朋友可以參考下

本文實(shí)例講述了Java中BigDecimal類(lèi)的簡(jiǎn)單用法,是Java程序設(shè)計(jì)中非常實(shí)用的技巧,分享給大家供大家參考。具體用法分析如下:

一般來(lái)說(shuō),一提到Java里面的商業(yè)計(jì)算,我們都知道不能用float和double,因?yàn)樗麄儫o(wú)法進(jìn)行精確計(jì)算。但是Java的設(shè)計(jì)者給編程人員提供了一個(gè)很有用的類(lèi)BigDecimal,他可以完善float和double類(lèi)無(wú)法進(jìn)行精確計(jì)算的缺憾。BigDecimal類(lèi)位于java.maths類(lèi)包下。首先我們來(lái)看下如何構(gòu)造一個(gè)BigDecimal對(duì)象。它的構(gòu)造函數(shù)很多,這里挑選最常用的兩個(gè)來(lái)演示一下:一個(gè)就是BigDecimal(double val),另一個(gè)就是BigDecimal(String str)。這兩個(gè)看上去沒(méi)什么太大區(qū)別,但是正像API描述中說(shuō)的那樣:

/*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.*/

也就是說(shuō)利用double作為參數(shù)的構(gòu)造函數(shù),無(wú)法精確構(gòu)造一個(gè)BigDecimal對(duì)象,需要自己指定一個(gè)上下文的環(huán)境,也就是指定精確位。而利用String對(duì)象作為參數(shù)傳入的構(gòu)造函數(shù)能精確的構(gòu)造出一個(gè)BigDecimal對(duì)象。請(qǐng)看下面的代碼:

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);
  }
}

運(yùn)行后輸出:

10.123
10.1229999999999993320898283855058252811431884765625

所以我們?cè)谶x擇構(gòu)造函數(shù)時(shí),要看具體需求而定。

另外,很多人會(huì)問(wèn)到怎么將基本類(lèi)型,如int,float,double,long,和BigDecimal對(duì)象相互轉(zhuǎn)換。很簡(jiǎn)單:

基本類(lèi)型通過(guò)構(gòu)造函數(shù)轉(zhuǎn)換成對(duì)應(yīng)的BigDecimal對(duì)象,而B(niǎo)igDecimal類(lèi)提供了諸如intValue(), floatValue(), doubleValue(), longValue()方法來(lái)將BigDecimal對(duì)象轉(zhuǎn)換成對(duì)應(yīng)的值。

關(guān)于BigDecimal是如何計(jì)算的,我以論壇中一個(gè)人的提問(wèn)帖子為例,來(lái)簡(jiǎn)單的寫(xiě)出BigDecimal的運(yùn)算方法。題目是:李白無(wú)事街上走,提壺去買(mǎi)酒。遇店加一倍,見(jiàn)花喝一斗,五遇花和店,喝光壺中酒,試問(wèn)李白壺中原有多少斗酒?

這道題應(yīng)該是從后往前推,并且要逆運(yùn)算,最后得出原有酒的體積。

import java.math.*;
public class Libai {
  public static void main(String args[]){
    BigDecimal volumn = new BigDecimal("0");
    for (int i=0; i<5; i++){      
      volumn = volumn.add(new BigDecimal("1"));
      volumn = volumn.divide(new BigDecimal("2"));
    }
    System.out.print(volumn);
  }
}

運(yùn)行結(jié)果:

0.96875

希望本文所述對(duì)大家Java程序設(shè)計(jì)的學(xué)習(xí)有所幫助。

相關(guān)文章

最新評(píng)論