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

您的位置:首頁技術(shù)文章
文章詳情頁

java 使用BigDecimal進(jìn)行貨幣金額計算的操作

瀏覽:112日期:2022-08-16 15:33:56

float和double只能用來做科學(xué)計算或者是工程計算,在商業(yè)計算中我們要用 java.math.BigDecimal。

而且使用BigDecimal類也可以進(jìn)行大數(shù)的操作。

方法 類型 描述 public BigDecimal(double val) 構(gòu)造 將double表示形式轉(zhuǎn)換為BigDecimal public BigDecimal(int val) 構(gòu)造 將int表示形式轉(zhuǎn)換為BigDecimal public BigDecimal(String val) 構(gòu)造 將字符串表示形式轉(zhuǎn)換為BigDecimal public BigDecimal add(BigDecimal augend) 普通 加法 public BigDecimal subtract(BigDecimal subtrahend) 普通 減法 public BigDecimal multiply(BigDecimal multiplicand) 普通 乘法 public BigDecimal divide(BigDecimal divisor) 普通 除法 一、 BigDecimal的計算

金額的計算BigDecimal類

double d = 9.84;double d2 = 1.22;//注意需要使用BigDecimal(String val)構(gòu)造方法BigDecimal bigDecimal = new BigDecimal(Double.toString(d));BigDecimal bigDecimal2 = new BigDecimal(Double.toString(d2));//加法BigDecimal bigDecimalAdd = bigDecimal.add(bigDecimal2);double add = bigDecimalAdd.doubleValue();//減法BigDecimal bigDecimalSubtract = bigDecimal.subtract(bigDecimal2);double subtract = bigDecimalSubtract.doubleValue();//乘法BigDecimal bigDecimalMultiply = bigDecimal.multiply(bigDecimal2);double multiply = bigDecimalMultiply.doubleValue();//除法int scale = 2;//保留2位小數(shù)BigDecimal bigDecimalDivide = bigDecimal.divide(bigDecimal2, scale, BigDecimal.ROUND_HALF_UP);double divide = bigDecimalDivide.doubleValue();//格式化double format = 12343171.6;//獲取常規(guī)數(shù)值格式NumberFormat number = NumberFormat.getNumberInstance();String str = number.format(format);//12,343,171.6//獲取整數(shù)數(shù)值格式NumberFormat integer = NumberFormat.getIntegerInstance();str = integer.format(format);//如果帶小數(shù)會四舍五入到整數(shù)12,343,172//獲取貨幣數(shù)值格式NumberFormat currency = NumberFormat.getCurrencyInstance();currency.setMinimumFractionDigits(2);//設(shè)置數(shù)的小數(shù)部分所允許的最小位數(shù)(如果不足后面補0)currency.setMaximumFractionDigits(4);//設(shè)置數(shù)的小數(shù)部分所允許的最大位數(shù)(如果超過會四舍五入)str = currency.format(format);//¥12,343,171.60//獲取顯示百分比的格式NumberFormat percent = NumberFormat.getPercentInstance();percent.setMinimumFractionDigits(2);//設(shè)置數(shù)的小數(shù)部分所允許的最小位數(shù)(如果不足后面補0)percent.setMaximumFractionDigits(3);//設(shè)置數(shù)的小數(shù)部分所允許的最大位數(shù)(如果超過會四舍五入)str = percent.format(format);//1,234,317,160.00%二、典型的Double類型的數(shù)值運算

/** * double的計算不精確,會有類似0.0000000000000002的誤差,正確的方法是使用BigDecimal或者用整型 * 整型地方法適合于貨幣精度已知的情況,比如12.11+1.10轉(zhuǎn)成1211+110計算,最后再/100即可 * 以下是摘抄的BigDecimal方法: */public class DoubleUtil implements Serializable { private static final long serialVersionUID = -3345205828566485102L; // 默認(rèn)除法運算精度 private static final Integer DEF_DIV_SCALE = 2; /** * 提供精確的加法運算。 * * @param value1 被加數(shù) * @param value2 加數(shù) * @return 兩個參數(shù)的和 */ public static Double add(Double value1, Double value2) { BigDecimal b1 = new BigDecimal(Double.toString(value1)); BigDecimal b2 = new BigDecimal(Double.toString(value2)); return b1.add(b2).doubleValue(); } /** * 提供精確的減法運算。 * * @param value1 被減數(shù) * @param value2 減數(shù) * @return 兩個參數(shù)的差 */ public static double sub(Double value1, Double value2) { BigDecimal b1 = new BigDecimal(Double.toString(value1)); BigDecimal b2 = new BigDecimal(Double.toString(value2)); return b1.subtract(b2).doubleValue(); } /** * 提供精確的乘法運算。 * * @param value1 被乘數(shù) * @param value2 乘數(shù) * @return 兩個參數(shù)的積 */ public static Double mul(Double value1, Double value2) { BigDecimal b1 = new BigDecimal(Double.toString(value1)); BigDecimal b2 = new BigDecimal(Double.toString(value2)); return b1.multiply(b2).doubleValue(); } /** * 提供(相對)精確的除法運算,當(dāng)發(fā)生除不盡的情況時, 精確到小數(shù)點以后10位,以后的數(shù)字四舍五入。 * * @param dividend 被除數(shù) * @param divisor 除數(shù) * @return 兩個參數(shù)的商 */ public static Double divide(Double dividend, Double divisor) { return divide(dividend, divisor, DEF_DIV_SCALE); } /** * 提供(相對)精確的除法運算。 當(dāng)發(fā)生除不盡的情況時,由scale參數(shù)指定精度,以后的數(shù)字四舍五入。 * * @param dividend 被除數(shù) * @param divisor 除數(shù) * @param scale 表示表示需要精確到小數(shù)點以后幾位。 * @return 兩個參數(shù)的商 */ public static Double divide(Double dividend, Double divisor, Integer scale) { if (scale < 0) { throw new IllegalArgumentException('The scale must be a positive integer or zero'); } BigDecimal b1 = new BigDecimal(Double.toString(dividend)); BigDecimal b2 = new BigDecimal(Double.toString(divisor)); return b1.divide(b2, scale,RoundingMode.HALF_UP).doubleValue(); } /** * 提供指定數(shù)值的(精確)小數(shù)位四舍五入處理。 * * @param value 需要四舍五入的數(shù)字 * @param scale 小數(shù)點后保留幾位 * @return 四舍五入后的結(jié)果 */ public static double round(double value,int scale){ if(scale<0){ throw new IllegalArgumentException('The scale must be a positive integer or zero'); } BigDecimal b = new BigDecimal(Double.toString(value)); BigDecimal one = new BigDecimal('1'); return b.divide(one,scale, RoundingMode.HALF_UP).doubleValue(); }}

補充:Java存儲金額解決方案BigDecimal

使用BigDecimal來存儲金額數(shù)據(jù),數(shù)據(jù)庫中使用decimal類型,長度18,小數(shù)點2。

在JPA中創(chuàng)建時如下:

@Column(columnDefinition='decimal(18,2)') private BigDecimal price; //商品價格

在數(shù)據(jù)庫中創(chuàng)建時如下:

java 使用BigDecimal進(jìn)行貨幣金額計算的操作

常用構(gòu)造器:

BigDecimal(double) 創(chuàng)建一個具有參數(shù)所指定雙精度值的對象

BigDecimal(long) 創(chuàng)建一個具有參數(shù)所指定長整數(shù)值的對象

BigDecimal(String) 創(chuàng)建一個具有參數(shù)所指定以字符串表示的數(shù)值的對象

常用方法:加減乘除

add(BigDecimal) BigDecimal對象中的值相加,返回BigDecimal對象

subtract(BigDecimal) BigDecimal對象中的值相減,返回BigDecimal對象

multiply(BigDecimal) BigDecimal對象中的值相乘,返回BigDecimal對象

divide(BigDecimal) BigDecimal對象中的值相除,返回BigDecimal對象

常用方法:數(shù)據(jù)轉(zhuǎn)換

toString() 將BigDecimal對象中的值轉(zhuǎn)換成字符串

doubleValue() 將BigDecimal對象中的值轉(zhuǎn)換成雙精度數(shù)

floatValue() 將BigDecimal對象中的值轉(zhuǎn)換成單精度數(shù)

longValue() 將BigDecimal對象中的值轉(zhuǎn)換成長整數(shù)

intValue() 將BigDecimal對象中的值轉(zhuǎn)換成整數(shù)

以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持好吧啦網(wǎng)。如有錯誤或未考慮完全的地方,望不吝賜教。

標(biāo)簽: Java
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品久久亚洲不卡| 国产不卡精品| 免费欧美一区| 欧美网站在线| 日韩中文字幕不卡| 婷婷亚洲成人| 国产色99精品9i| 久久久国产精品网站| 国产成人精品一区二区免费看京 | 成人日韩在线| 色一区二区三区| 激情五月色综合国产精品| 久久国产精品毛片| 日韩不卡在线观看日韩不卡视频| 国产精品久久| 日本久久综合| 亚洲黄色在线| 国产精品一区二区免费福利视频| 国产va免费精品观看精品视频| 中文字幕系列一区| 日韩精品一二三| 欧美国产视频| 好吊视频一区二区三区四区| 亚洲精品美女91| 精品视频一区二区三区在线观看| 日韩精品dvd| 亚洲色图国产| 超碰99在线| 视频一区视频二区中文字幕| 久久a爱视频| 黄色亚洲精品| 麻豆精品视频在线| 亚洲综合不卡| 麻豆久久久久久久| 在线视频免费在线观看一区二区| 国产激情久久| 伊人影院久久| 精品久久国产一区| 亚洲欧美日韩精品一区二区| 国产成人久久精品麻豆二区| 亚洲色图国产| 久久精品国产大片免费观看| 国产精品探花在线观看| 91精品二区| 久久字幕精品一区| 另类国产ts人妖高潮视频| 高清精品久久| 91麻豆精品| 日韩一区二区久久| 国产成人久久精品麻豆二区| 四虎在线精品| 在线日韩欧美| 激情综合五月| 亚洲国产不卡| 精品亚洲a∨| 亚洲精品黄色| 成人精品久久| 欧美另类中文字幕| 久久久影院免费| 精品欧美日韩精品| 亚洲精品黄色| 欧美特黄视频| 欧美精品资源| 国语精品一区| 国产精品chinese| 亚洲精品少妇| 欧美+日本+国产+在线a∨观看| 久久久国产精品入口麻豆| 亚洲天堂av资源在线观看| 福利在线一区| 欧美极品一区二区三区| 日本中文字幕视频一区| 99精品综合| av资源中文在线天堂| 国产福利一区二区精品秒拍| 亚洲人亚洲人色久| 欧美日韩少妇| 成人免费网站www网站高清| 国产精品亚洲综合色区韩国| 亚洲精品在线国产| 久久xxxx| 日韩视频在线一区二区三区| 亚洲91视频| 福利片在线一区二区| 久久成人高清| 麻豆91精品91久久久的内涵| 91p九色成人| 欧美日本三区| 欧美亚洲二区| 国产亚洲精品美女久久| 日韩av网站免费在线| 日本亚洲视频在线| 日韩欧美中文字幕在线视频| 亚洲人成精品久久久| 亚洲视频二区| 综合亚洲自拍| 日韩av影院| 国产精品成人国产| 欧美a级一区二区| 黄色网一区二区| 国产成人精品免费视| 国产中文欧美日韩在线| 成人午夜在线| а√天堂8资源中文在线| 日韩av片子| 丝袜美腿一区| 天堂网在线观看国产精品| 国产亚洲亚洲| 中文字幕亚洲精品乱码| 美国三级日本三级久久99| 日本aⅴ免费视频一区二区三区| 国产日韩欧美在线播放不卡| 欧美在线看片| 国产精品久久乐| 久久精品亚洲| 日韩不卡免费高清视频| 黄色在线一区| 亚洲欧洲av| 国产极品嫩模在线观看91精品| 国产精品毛片久久| 免费黄色成人| 日本一区福利在线| 久久av影视| 精品国产99| 国内精品福利| 日本v片在线高清不卡在线观看| 国产极品模特精品一二| 欧美三区四区| 精品国模一区二区三区| 亚洲欧美日韩精品一区二区| 欧美久久一区二区三区| a国产在线视频| 国产视频亚洲| 久久av影视| 不卡av一区二区| 欧美日韩一区二区国产| 日韩欧美一区二区三区在线视频| 亚洲精品极品少妇16p| 日本不卡视频在线| 色爱综合网欧美| 蜜桃视频欧美| 日韩欧美中文字幕一区二区三区| 久久av免费看| 久久久久久色 | 久久wwww| 欧美日韩精品一区二区视频| 伊人精品一区| 日本在线视频一区二区| 成人影视亚洲图片在线| 免费视频一区三区| 国产精品久久久久久久久久齐齐 | 香蕉精品999视频一区二区| 欧美日本三区| 日韩欧美看国产| 蜜桃免费网站一区二区三区| 精品少妇av| 亚洲精品影视| 久久免费黄色| 国产高清亚洲| 欧美天堂视频| 91亚洲精品视频在线观看| 亚洲香蕉网站| 青青草91视频| 午夜精品影院| 国产aⅴ精品一区二区三区久久 | 伊人久久亚洲| 成人在线黄色| 亚洲a成人v| 亚洲夜间福利| 国产调教精品| 午夜精品亚洲| 91精品国产自产在线丝袜啪| 免费不卡在线观看| 久久久国产精品网站| 少妇高潮一区二区三区99| 国产欧美三级| 天堂成人国产精品一区| 日韩精品欧美| 欧美国产先锋| 欧美一区91| 亚洲调教视频在线观看| 国产精品久久久久久av公交车| 欧美日韩高清| 日韩欧美综合| 蜜桃精品视频| 精品一区毛片| 国产欧美日韩精品一区二区三区 | 一级成人国产| 激情久久五月| 日韩美女一区二区三区在线观看| 久久激情婷婷| 国产精品v亚洲精品v日韩精品| 亚洲精品高潮| 中文无码久久精品| aa亚洲婷婷| 欧美91精品| 久久久久国产精品一区二区| 午夜性色一区二区三区免费视频| 巨乳诱惑日韩免费av| 好看的亚洲午夜视频在线|