成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

您的位置:首頁技術文章
文章詳情頁

Java Bigdecimal使用原理詳解

瀏覽:3日期:2022-09-04 13:47:59

一般來說,一提到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.12310.1229999999999993320898283855058252811431884765625

所以我們在選擇構造函數時,要看具體需求而定。

另外,很多人會問到怎么將基本類型,如int,float,double,long,和BigDecimal對象相互轉換。很簡單:

基本類型通過構造函數轉換成對應的BigDecimal對象,而BigDecimal類提供了諸如intValue(), floatValue(), doubleValue(), longValue()方法來將BigDecimal對象轉換成對應的值。

一、BigDecimal 的加減乘除

BigDecimal bignum1 = new BigDecimal('10'); BigDecimal bignum2 = new BigDecimal('5'); BigDecimal bignum3 = null; //加法 bignum3 = bignum1.add(bignum2); System.out.println('和 是:' + bignum3); //減法 bignum3 = bignum1.subtract(bignum2); System.out.println('差 是:' + bignum3); //乘法 bignum3 = bignum1.multiply(bignum2); System.out.println('積 是:' + bignum3); //除法 bignum3 = bignum1.divide(bignum2); System.out.println('商 是:' + bignum3);

二、BigDecimal 的比較大小。

BigDecimal num1 = new BigDecimal('0'); BigDecimal num2 = new BigDecimal('1'); BigDecimal num3 = new BigDecimal('2'); BigDecimal num = new BigDecimal('1'); //用做比較的值 System.out.println(num1.compareTo(num)); //小于 時,返回 -1 System.out.println(num2.compareTo(num)); //等于 時,返回 0 System.out.println(num3.compareTo(num)); //大于 時,返回 1

補充:

BigInteger 也可以存放比較大的數, 和 BigDecimal 的區別是 :BigInteger 存放的是大的整數,而BigDecimal 存放大的小數

繼續補充一下,用BigDecimal 寫個for循環。

for (BigDecimal i = new BigDecimal('0'); i.compareTo(new BigDecimal('10')) != 1; i = i.add(new BigDecimal('1'))) { System.out.print(i + 't'); }

控制臺打印的是從0 到 10 。

三、Java中的BigDecimal使用注意事項

1.BigDecial是immutable的,就像String一樣,它的所有操作都會生成一個新的對象,所以

amount.add( thisAmount );

是錯誤的;而應該是:

amount = amount.add( thisAmount );

2. 不要用equals方法來比較BigDecimal對象,因為它的equals方法會比較scale,如果scale不一樣,它會返回false;

BigDecimal a = new BigDecimal('2.00');BigDecimal b = new BigDecimal('2.0');print(a.equals(b)); // false

所以你應該使用compareTo()和signum()方法

a.compareTo(b); // returns (-1 if a < b), (0 if a == b), (1 if a > b)a.signum(); // returns (-1 if a < 0), (0 if a == 0), (1 if a > 0)

3. 使用BigDecimal的字符串構造函數,不要使用double參數的構造函數,否則的話會出現你不想要的結果。

例如下面的代碼分別使用double和String的構造函數,然后使用HALF_EVEN的round方法,但是輸出結果不一樣

System.out.println('=================='); for(int i = 0; i < 10; i ++) { StringBuffer sb = new StringBuffer(); sb.append('0.'); sb.append(i); sb.append('5'); BigDecimal bdx = new BigDecimal(sb.toString()); System.out.println(sb + ' ' +bdx.setScale(1, RoundingMode.HALF_EVEN)); } System.out.println('=================='); for(int i = 0; i < 10; i ++) { StringBuffer sb = new StringBuffer(); sb.append('0.'); sb.append(i); sb.append('5'); BigDecimal bdx = new BigDecimal(Double.valueOf(sb.toString())); System.out.println(sb + ' ' +bdx.setScale(1, RoundingMode.HALF_EVEN)); }

輸出是:

==================0.05 0.00.15 0.20.25 0.20.35 0.40.45 0.40.55 0.60.65 0.60.75 0.80.85 0.80.95 1.0==================0.05 0.10.15 0.10.25 0.20.35 0.30.45 0.50.55 0.60.65 0.70.75 0.80.85 0.80.95 0.9

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
99久久久免费精品国产一区二区| 国产一区二区伦理| 色婷婷久久99综合精品jk白丝| 91久久精品www人人做人人爽| 91性感美女视频| 成人免费视频视频在线观看免费 | 国产农村妇女精品一区二区| 黄色精品一区| 亚洲高清免费| 日韩视频三区| 欧美久久成人| 国产尤物精品| 亚洲三级电影在线观看| 亚洲激情自拍| 亚洲影音先锋| 色婷婷综合久久久| 91搞黄在线观看| 欧美日韩一区二区三区在线| 欧美高清你懂得| 欧美一级黄色大片| 精品国产乱码久久久久久蜜臀| 日韩视频中午一区| 欧美成人在线直播| 精品国产精品一区二区夜夜嗨| 精品少妇一区二区三区| 欧美成人精品二区三区99精品| 日韩精品自拍偷拍| 国产欧美一区二区精品性色| 久久精品男人的天堂| 国产精品福利影院| 亚洲一区二区三区爽爽爽爽爽| 亚洲国产日韩a在线播放性色| 午夜精品免费在线观看| 日本不卡在线视频| 国产高清久久久| 99视频有精品| 狠狠久久综合婷婷不卡| 亚洲国产精品一区二区第一页 | 欧美69视频| 好看的亚洲午夜视频在线| 国产精品欧美日韩一区| 欧美在线观看18| 欧美成人r级一区二区三区| 中文久久乱码一区二区| 亚洲一级片在线观看| 欧美96一区二区免费视频| 成人精品鲁一区一区二区| 欧美日韩少妇| 久久在线91| 欧美成人乱码一区二区三区| 欧美国产日韩亚洲一区| 午夜久久福利影院| 国产a久久麻豆| 黄色亚洲免费| 色婷婷久久久亚洲一区二区三区| 日韩午夜精品视频| 国产精品不卡在线| 日本午夜一区二区| 国产传媒久久文化传媒| 国内视频精品| 欧美午夜片在线观看| 日本一区二区在线不卡| 免费成人性网站| 91在线免费看| 国产精品一区在线播放| 欧美一区日韩一区| 国产精品久久久久久久岛一牛影视| 亚洲一区二区综合| 成人免费毛片片v| 在线亚洲欧美| 精品三级av在线| 亚洲国产精品一区二区久久 | 国产精品一区二区三区网站| 欧美精品一卡| 欧美三级中文字幕在线观看| 国产精品国产三级国产普通话99| 蜜臀av国产精品久久久久| 91老师片黄在线观看| 久久久99爱| 国产欧美精品国产国产专区| 麻豆国产精品777777在线| 国产精品videossex久久发布| 色94色欧美sute亚洲线路一ni| 日韩精品一区二区在线观看| 亚洲国产精品嫩草影院| 欧美一区视频| 欧美精品tushy高清| 亚洲激情男女视频| 成人爱爱电影网址| 在线欧美小视频| 国产精品久久久一本精品| 国产激情视频一区二区三区欧美| 亚洲精品国产精品国自产观看| 日韩一区二区三区电影| 性做久久久久久| 国产精品久久7| 日韩午夜小视频| 美国十次综合导航| 亚洲欧洲精品一区二区三区波多野1战4 | 久久久国产精品一区二区三区| 中文字幕高清不卡| 国产乱码精品一区二区三区五月婷 | 久久久精品性| 国产精品久久久久四虎| 成人涩涩免费视频| 欧美日韩在线观看一区二区| 一级中文字幕一区二区| 你懂的国产精品| 欧美tickling网站挠脚心| 九九久久精品视频| 久久人人超碰| 亚洲综合男人的天堂| 欧美午夜不卡| 337p粉嫩大胆噜噜噜噜噜91av| 捆绑调教一区二区三区| 亚洲综合二区| 136国产福利精品导航| 91论坛在线播放| 精品国产凹凸成av人导航| 韩国精品一区二区| 91久久线看在观草草青青| 亚洲一区在线电影| 亚洲精品社区| 中文字幕不卡在线| 欧美激情第10页| 久久尤物电影视频在线观看| 国产馆精品极品| 欧美一区二区三区爱爱| 另类小说视频一区二区| 久久国产日韩| 一个色在线综合| 亚洲日本国产| 亚洲欧美国产毛片在线| 在线观看欧美一区| 亚洲三级电影全部在线观看高清| 欧美日本精品| 国产网站一区二区| 农村妇女精品| 欧美国产视频在线| 欧美激情第六页| 国产欧美日韩精品在线| 91蜜桃传媒精品久久久一区二区| 日韩欧美亚洲国产精品字幕久久久| 久久成人av少妇免费| 欧美在线短视频| 国产一区三区三区| 欧美一级欧美三级| 99国产一区二区三精品乱码| 亚洲精品在线免费观看视频| 懂色av一区二区夜夜嗨| 日韩精品专区在线| 成人午夜av电影| 久久久国产午夜精品| 欧美激情第二页| 亚洲欧洲美洲综合色网| 一区二区三区欧美在线| 亚洲午夜精品在线| 色婷婷精品久久二区二区蜜臂av| 香蕉久久夜色精品国产使用方法| 毛片一区二区| 久久成人免费电影| 日韩欧美国产不卡| 欧美国产91| 亚洲精品va在线观看| 91福利社在线观看| 高清shemale亚洲人妖| 久久久久久久网| 夜夜嗨网站十八久久| 日韩成人一区二区| 91精品欧美福利在线观看| 99久久综合精品| 日韩毛片高清在线播放| 久久本道综合色狠狠五月| 免费欧美在线视频| 日韩你懂的在线播放| 午夜欧美精品久久久久久久| 亚洲欧美日本在线| 在线精品视频小说1| 成人黄动漫网站免费app| 国产精品久久99| 久久精精品视频| 国产一区二区三区不卡在线观看 | 久久久久久亚洲精品杨幂换脸| 国产在线国偷精品免费看| 久久亚洲精华国产精华液| 亚洲片区在线| 精品一区二区三区日韩| 久久久久国产精品人| 国产精品亚洲综合久久| 精品亚洲成av人在线观看| xnxx国产精品| 国产视频一区免费看| 韩国一区二区视频| 欧美激情一区在线| 免费在线一区二区| 国产精品123区| 亚洲永久精品国产| 欧美丰满一区二区免费视频| 好吊色欧美一区二区三区四区| 久久精品国产77777蜜臀|