程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java中堆和棧的差別剖析

java中堆和棧的差別剖析

編輯:關於JAVA

java中堆和棧的差別剖析。本站提示廣大學習愛好者:(java中堆和棧的差別剖析)文章只能為提供參考,不一定能成為您想要的結果。以下是java中堆和棧的差別剖析正文


本文實例講述了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是若何盤算的,我以服裝論壇t.vhao.net中一小我的發問帖子為例,來簡略的寫出BigDecimal的運算辦法。標題是:李白無事街上走,提壺去買酒。遇店加一倍,見花喝一斗,五遇花和店,喝光壺中酒,試問李白壺華夏有若干斗酒?

這道題應當是從後往前推,而且要逆運算,最初得出原有酒的體積。

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

運轉成果:

0.96875

願望本文所述對年夜家Java法式設計的進修有所贊助。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved