日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

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

Java Bigdecimal使用原理詳解

瀏覽:20日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
综合激情在线| 欧美日一区二区| 日韩高清一区二区| 婷婷综合一区| 久久精品99国产精品| 日本va欧美va欧美va精品| 亚洲精品动态| 国产精品原创| 亚洲日产国产精品| 欧美在线91| 国产探花一区| 美女精品视频在线| 中文在线а√天堂| 久久国产中文字幕| 国产视频一区三区| 日韩和欧美一区二区三区| 免费一级欧美片在线观看网站| 国产激情在线播放| 一区二区视频欧美| 亚洲精品婷婷| 精品视频一区二区三区四区五区 | 日本欧美久久久久免费播放网| 久久狠狠久久| 国产va免费精品观看精品视频| 久久激五月天综合精品| 毛片在线网站| 免费在线欧美视频| 国产日韩一区二区三区在线播放| 精品国产欧美日韩| 久久一区二区三区喷水| 免费成人性网站| 香蕉久久国产| 红桃视频亚洲| 亚洲欧洲专区| 国产日韩视频| 麻豆精品新av中文字幕| 亚洲伦乱视频| 性一交一乱一区二区洋洋av| 久久国产尿小便嘘嘘| 欧美精品高清| 日韩在线视频一区二区三区| 久久久精品国产**网站| 激情六月综合| 国产精品视频一区二区三区 | 久久久久久久久丰满| 在线亚洲激情| 国产精品亚洲一区二区在线观看| 日韩在线观看一区| 天堂久久av| 日韩av免费| 日韩不卡在线观看日韩不卡视频| 视频一区日韩精品| 不卡一二三区| 欧美一区自拍| 午夜免费一区| 久久一区视频| 蜜桃视频第一区免费观看| 色乱码一区二区三区网站| 综合五月婷婷| 欧美 日韩 国产精品免费观看| 精品国产免费人成网站| 性欧美xxxx免费岛国不卡电影| 欧美日韩视频免费看| 午夜久久影院| 精品久久久中文字幕| 影音先锋久久精品| 久久精品国产亚洲夜色av网站| 欧美日韩1区| 亚洲欧洲一区| 欧美好骚综合网| 日本成人中文字幕| 黄色免费成人| 都市激情国产精品| 欧美在线看片| 欧美一区=区| 日韩一区亚洲二区| 日韩精品免费一区二区夜夜嗨| 久久天堂av| 精品国产乱码久久久久久樱花| 亚洲免费观看高清完整版在线观| 99久久久久久中文字幕一区| 国产极品嫩模在线观看91精品| 免费在线成人网| 亚洲成人三区| 精品日韩视频| 高清一区二区| 欧美国产免费| 91欧美精品| 免费一级片91| 一区二区自拍| 亚洲成人精品| 韩日一区二区| 国产经典一区| 国产精品亚洲人成在99www| 亚洲tv在线| 美女久久一区| 日韩一区二区久久| 国产综合视频| 91精品啪在线观看国产18| 91一区二区| 精品久久久亚洲| 免费看一区二区三区| 久久精品999| 欧美一区成人| 7777精品| 91麻豆精品激情在线观看最新| 亚洲欧美日韩国产一区二区| 国产91久久精品一区二区| 亚洲成a人片| 亚洲电影有码| 播放一区二区| 日韩精品欧美激情一区二区| 日韩欧美精品综合| 色天使综合视频| 久久中文字幕av| 欧美亚洲国产精品久久| 亚洲二区视频| av一区二区高清| 亚洲成人精选| 亚洲综合精品四区| 久热综合在线亚洲精品| 亚洲经典在线| 99成人在线| 免费成人在线影院| 中文字幕日韩亚洲| 日韩精品国产欧美| 国产一级成人av| 国产极品嫩模在线观看91精品| 麻豆国产欧美一区二区三区 | 欧美综合另类| 亚洲网站视频| 在线视频精品| 视频一区日韩精品| 男女男精品视频网| 中文字幕一区二区三区在线视频| 都市激情国产精品| 日韩精品中文字幕一区二区| 久久香蕉国产| 日韩精品亚洲专区在线观看| 一区二区自拍| 亚洲日本欧美| 国产色99精品9i| 福利一区视频| 九九综合在线| 在线日韩成人| 国产欧美日韩在线一区二区| 免费在线观看一区| 天堂av在线| 极品裸体白嫩激情啪啪国产精品| 99亚洲视频| 日韩国产在线一| 久久久久亚洲精品中文字幕| 国产v综合v| 亚洲激情精品| 国产亚洲观看| 亚洲精品.com| 亚洲一区二区三区久久久| 国产日韩欧美三区| 欧美激情另类| 91精品国产91久久久久久黑人| 日韩精品一级中文字幕精品视频免费观看| 国产午夜精品一区在线观看| 欧美国产一级| 国产亚洲网站| 麻豆视频一区| 波多野结衣一区| 69堂精品视频在线播放| 成人午夜网址| 亚洲自拍另类| 精品一区视频| 日韩视频久久| 欧美亚洲免费| 欧美日中文字幕| 国产欧美日韩免费观看| 日韩天堂在线| 日韩精品一区二区三区中文字幕| 欧美一区=区| 日韩va亚洲va欧美va久久| 日韩不卡视频在线观看| 亚洲欧美日韩专区| 欧美黄色精品| 久色成人在线| 欧美日韩在线观看首页| 婷婷综合一区| 久久麻豆精品| 久久av国产紧身裤| 欧美日韩国产探花| 国产福利资源一区| 日韩视频在线一区二区三区| 国产精品xxx在线观看| 在线国产一区| 久久精品亚洲| 亚洲人成网77777色在线播放| 精品久久久网| 亚洲久久视频| 亚洲高清成人| 久久精品国产99国产精品| 亚洲精品综合| 欧美日韩中文一区二区| 国产美女久久|