亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

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

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

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

float和double只能用來做科學(xué)計(jì)算或者是工程計(jì)算,在商業(yè)計(jì)算中我們要用 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的計(jì)算

金額的計(jì)算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ù)會(huì)四舍五入到整數(shù)12,343,172//獲取貨幣數(shù)值格式NumberFormat currency = NumberFormat.getCurrencyInstance();currency.setMinimumFractionDigits(2);//設(shè)置數(shù)的小數(shù)部分所允許的最小位數(shù)(如果不足后面補(bǔ)0)currency.setMaximumFractionDigits(4);//設(shè)置數(shù)的小數(shù)部分所允許的最大位數(shù)(如果超過會(huì)四舍五入)str = currency.format(format);//¥12,343,171.60//獲取顯示百分比的格式NumberFormat percent = NumberFormat.getPercentInstance();percent.setMinimumFractionDigits(2);//設(shè)置數(shù)的小數(shù)部分所允許的最小位數(shù)(如果不足后面補(bǔ)0)percent.setMaximumFractionDigits(3);//設(shè)置數(shù)的小數(shù)部分所允許的最大位數(shù)(如果超過會(huì)四舍五入)str = percent.format(format);//1,234,317,160.00%二、典型的Double類型的數(shù)值運(yùn)算

/** * double的計(jì)算不精確,會(huì)有類似0.0000000000000002的誤差,正確的方法是使用BigDecimal或者用整型 * 整型地方法適合于貨幣精度已知的情況,比如12.11+1.10轉(zhuǎn)成1211+110計(jì)算,最后再/100即可 * 以下是摘抄的BigDecimal方法: */public class DoubleUtil implements Serializable { private static final long serialVersionUID = -3345205828566485102L; // 默認(rèn)除法運(yùn)算精度 private static final Integer DEF_DIV_SCALE = 2; /** * 提供精確的加法運(yùn)算。 * * @param value1 被加數(shù) * @param value2 加數(shù) * @return 兩個(gè)參數(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(); } /** * 提供精確的減法運(yùn)算。 * * @param value1 被減數(shù) * @param value2 減數(shù) * @return 兩個(gè)參數(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(); } /** * 提供精確的乘法運(yùn)算。 * * @param value1 被乘數(shù) * @param value2 乘數(shù) * @return 兩個(gè)參數(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(); } /** * 提供(相對(duì))精確的除法運(yùn)算,當(dāng)發(fā)生除不盡的情況時(shí), 精確到小數(shù)點(diǎn)以后10位,以后的數(shù)字四舍五入。 * * @param dividend 被除數(shù) * @param divisor 除數(shù) * @return 兩個(gè)參數(shù)的商 */ public static Double divide(Double dividend, Double divisor) { return divide(dividend, divisor, DEF_DIV_SCALE); } /** * 提供(相對(duì))精確的除法運(yùn)算。 當(dāng)發(fā)生除不盡的情況時(shí),由scale參數(shù)指定精度,以后的數(shù)字四舍五入。 * * @param dividend 被除數(shù) * @param divisor 除數(shù) * @param scale 表示表示需要精確到小數(shù)點(diǎn)以后幾位。 * @return 兩個(gè)參數(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ù)點(diǎn)后保留幾位 * @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(); }}

補(bǔ)充:Java存儲(chǔ)金額解決方案BigDecimal

使用BigDecimal來存儲(chǔ)金額數(shù)據(jù),數(shù)據(jù)庫(kù)中使用decimal類型,長(zhǎng)度18,小數(shù)點(diǎn)2。

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

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

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

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

常用構(gòu)造器:

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

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

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

常用方法:加減乘除

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

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

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

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

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

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

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

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

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

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

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

標(biāo)簽: Java
相關(guān)文章:
主站蜘蛛池模板: 一级欧美一级日韩片 | 欧美黄色影院 | 国产精品免费在线播放 | 2022在线精品视频网站 | 欧亚色图 | 精品亚洲成a人片在线观看 精品亚洲成a人在线播放 | 欧美成人h版影院在线播放 欧美成人h版整片合集 | 极品国产一区二区三区 | 国产成人精品高清在线 | 亚洲精品美女一区二区三区乱码 | 被黑人操 | 大片在线播放日本一级毛片 | 久久97久久99久久综合 | 美国人与性xxxxxxx | 1769视频在线观看国产 | 黄色一及毛片 | 中文字幕色婷婷在线视频 | 亚洲限制级 | 狠狠色香婷婷久久亚洲精品 | 国产在线播放你懂的 | 亚洲黄色网址 | 国产不卡视频在线播放 | 特黄特级高清免费视频毛片 | 亚洲欧美精品一区 | 国产日韩在线播放 | 久草免费资源在线 | 国产精品中文字幕在线 | 一级做a爱久久久久久久 | 欧美韩日国产 | 国产一区二区在线视频观看 | 国产福利精品一区二区 | 九九国产在线视频 | 色妇色综合久久夜夜 | 欧美黑人白人bbw | 伊人激情久久综合中文字幕 | 午夜精品久久久久久久久 | 91短视频黄色 | 久久99国产精一区二区三区! | 国产又爽又色在线观看 | 成人欧美一级毛片免费观看 | 欧美精品v日韩精品v国产精品 |