一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|JAVA教程|ASP教程|

服務器之家 - 編程語言 - JAVA教程 - Java中BigDecimal類的簡單用法

Java中BigDecimal類的簡單用法

2019-11-29 15:47shichen2014 JAVA教程

這篇文章主要介紹了Java中BigDecimal類的簡單用法,是Java應用程序開發中非常實用的技巧,本文以實例形式對此進行了簡單的分析,需要的朋友可以參考下

本文實例講述了Java中BigDecimal類的簡單用法,是Java程序設計中非常實用的技巧,分享給大家供大家參考。具體用法分析如下:

一般來說,一提到Java里面的商業計算,我們都知道不能用float和double,因為他們無法進行精確計算。但是Java的設計者給編程人員提供了一個很有用的類BigDecimal,他可以完善float和double類無法進行精確計算的缺憾。BigDecimal類位于java.maths類包下。首先我們來看下如何構造一個BigDecimal對象。它的構造函數很多,這里挑選最常用的兩個來演示一下:一個就是BigDecimal(double val),另一個就是BigDecimal(String str)。這兩個看上去沒什么太大區別,但是正像API描述中說的那樣:

?
1
2
3
4
5
6
7
8
9
/*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對象。請看下面的代碼:

?
1
2
3
4
5
6
7
8
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的運算方法。題目是:李白無事街上走,提壺去買酒。遇店加一倍,見花喝一斗,五遇花和店,喝光壺中酒,試問李白壺中原有多少斗酒?

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

?
1
2
3
4
5
6
7
8
9
10
11
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程序設計的學習有所幫助。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 欧美日韩人成在线观看 | 好大好硬好深好爽想要吃奶 | 夫妇交换小说全文阅读 | 欧美精品99 | 天天中文 | 俄罗斯三级完整版在线观看 | 3d欧美人与禽交 | 日韩欧美中文字幕出 | 精品日韩欧美一区二区三区 | 摸逼小说 | 好爽轻点太大了太深了 | 特黄aa级毛片免费视频播放 | 国产悠悠视频在线播放 | 韩国美女激情vip | 香蕉精品 | 免费看视频高清在线观看 | 小SAO货叫大声点妓女 | 国产美女做爰免费视频网址 | 精品久久洲久久久久护士免费 | 免费一级片在线观看 | 美女被的视频 | www.色女人.com| 亚洲26uuuu最新地址 | 成年美女黄网色大观看全 | 拔插拔插8x8x海外华人免费视频 | 国产精品毛片va一区二区三区 | 国内精品露脸在线视频播放 | 大好硬好深好爽想要视频 | 国产一区二区三区欧美精品 | 99热这里只有精品久久免费 | 日韩视频一区二区三区 | 国产99久久久国产精品成人 | 国产在线精品香蕉综合网一区 | 欧美a一片xxxx片与善交 | 成年人免费观看的视频 | 欧美特黄特色aaa大片免费看 | 免费看日产一区二区三区 | 免费人成在线观看视频播放 | 楚乔传第二部免费播放电视连续剧 | 国产精品合集久久久久青苹果 | 91久久青青青国产免费 |