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

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

java 使用BigDecimal進行貨幣金額計算的操作

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

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

而且使用BigDecimal類也可以進行大數的操作。

方法 類型 描述 public BigDecimal(double val) 構造 將double表示形式轉換為BigDecimal public BigDecimal(int val) 構造 將int表示形式轉換為BigDecimal public BigDecimal(String val) 構造 將字符串表示形式轉換為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)構造方法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位小數BigDecimal bigDecimalDivide = bigDecimal.divide(bigDecimal2, scale, BigDecimal.ROUND_HALF_UP);double divide = bigDecimalDivide.doubleValue();//格式化double format = 12343171.6;//獲取常規數值格式NumberFormat number = NumberFormat.getNumberInstance();String str = number.format(format);//12,343,171.6//獲取整數數值格式NumberFormat integer = NumberFormat.getIntegerInstance();str = integer.format(format);//如果帶小數會四舍五入到整數12,343,172//獲取貨幣數值格式NumberFormat currency = NumberFormat.getCurrencyInstance();currency.setMinimumFractionDigits(2);//設置數的小數部分所允許的最小位數(如果不足后面補0)currency.setMaximumFractionDigits(4);//設置數的小數部分所允許的最大位數(如果超過會四舍五入)str = currency.format(format);//¥12,343,171.60//獲取顯示百分比的格式NumberFormat percent = NumberFormat.getPercentInstance();percent.setMinimumFractionDigits(2);//設置數的小數部分所允許的最小位數(如果不足后面補0)percent.setMaximumFractionDigits(3);//設置數的小數部分所允許的最大位數(如果超過會四舍五入)str = percent.format(format);//1,234,317,160.00%二、典型的Double類型的數值運算

/** * double的計算不精確,會有類似0.0000000000000002的誤差,正確的方法是使用BigDecimal或者用整型 * 整型地方法適合于貨幣精度已知的情況,比如12.11+1.10轉成1211+110計算,最后再/100即可 * 以下是摘抄的BigDecimal方法: */public class DoubleUtil implements Serializable { private static final long serialVersionUID = -3345205828566485102L; // 默認除法運算精度 private static final Integer DEF_DIV_SCALE = 2; /** * 提供精確的加法運算。 * * @param value1 被加數 * @param value2 加數 * @return 兩個參數的和 */ 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 被減數 * @param value2 減數 * @return 兩個參數的差 */ 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 被乘數 * @param value2 乘數 * @return 兩個參數的積 */ 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(); } /** * 提供(相對)精確的除法運算,當發生除不盡的情況時, 精確到小數點以后10位,以后的數字四舍五入。 * * @param dividend 被除數 * @param divisor 除數 * @return 兩個參數的商 */ public static Double divide(Double dividend, Double divisor) { return divide(dividend, divisor, DEF_DIV_SCALE); } /** * 提供(相對)精確的除法運算。 當發生除不盡的情況時,由scale參數指定精度,以后的數字四舍五入。 * * @param dividend 被除數 * @param divisor 除數 * @param scale 表示表示需要精確到小數點以后幾位。 * @return 兩個參數的商 */ 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(); } /** * 提供指定數值的(精確)小數位四舍五入處理。 * * @param value 需要四舍五入的數字 * @param scale 小數點后保留幾位 * @return 四舍五入后的結果 */ 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來存儲金額數據,數據庫中使用decimal類型,長度18,小數點2。

在JPA中創建時如下:

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

在數據庫中創建時如下:

java 使用BigDecimal進行貨幣金額計算的操作

常用構造器:

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

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

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

常用方法:加減乘除

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

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

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

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

常用方法:數據轉換

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

doubleValue() 將BigDecimal對象中的值轉換成雙精度數

floatValue() 將BigDecimal對象中的值轉換成單精度數

longValue() 將BigDecimal對象中的值轉換成長整數

intValue() 將BigDecimal對象中的值轉換成整數

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

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
亚洲三级电影全部在线观看高清| 久久成人羞羞网站| 日韩免费一区二区三区在线播放| 久久九九久久九九| 亚洲成a人片在线观看中文| 国产成人超碰人人澡人人澡| 亚洲狼人精品一区二区三区| 欧美在线观看禁18| 久久嫩草精品久久久精品| 亚洲欧美国产毛片在线| 韩国v欧美v日本v亚洲v| 激情综合电影网| 欧美精品粉嫩高潮一区二区| 国产精品久久久一本精品| 六月丁香婷婷色狠狠久久| 欧美日韩大片一区二区三区| 麻豆av福利av久久av| 欧美成人精品高清在线播放 | 久久久久久久久久久99999| 亚洲一区在线视频观看| 国产成人啪免费观看软件| 国产偷自视频区视频一区二区| 日韩欧美国产一区二区在线播放| 亚洲一区二区三区中文字幕 | 国产在线日韩| 欧美人体做爰大胆视频| 中国色在线观看另类| 美女网站在线免费欧美精品| 欧美喷水视频| 欧美日韩在线直播| 国产精品第四页| 国产成人精品免费网站| 国产亚洲精品v| 日韩视频免费观看高清在线视频| 亚洲午夜一二三区视频| 91免费观看在线| 精品视频一区 二区 三区| 亚洲麻豆国产自偷在线| 成人ar影院免费观看视频| 久久av一区二区| 国产精品私人影院| 国产91富婆露脸刺激对白| 色综合久久久久| 亚洲婷婷综合色高清在线| 国产成人av一区二区三区在线 | 美女脱光内衣内裤视频久久影院| 欧美日韩一卡| 欧美一区二区不卡视频| 日本美女一区二区三区视频| 精品动漫一区| 久久色在线观看| 国产一级精品在线| 久久国产高清| 综合激情成人伊人| 91免费版在线| 日韩一区二区三区视频在线| 日韩电影一二三区| 99成人在线| 国产精品蜜臀在线观看| 成人美女在线观看| 欧美精品 日韩| 日韩高清一区在线| 最新成人av网站| 久久久亚洲精华液精华液精华液 | 一区二区三区四区中文字幕| 91美女在线视频| 日韩精品一区二区在线| 国产一区二区三区日韩| 在线精品观看国产| 性久久久久久久久久久久| 一本色道久久综合一区| 国产精品女主播av| 91免费视频网址| 久久奇米777| 成人高清免费观看| 5858s免费视频成人| 美国三级日本三级久久99| 久久在线视频| 天天综合日日夜夜精品| 亚洲综合二区| 亚洲色大成网站www久久九九| 欧美另类亚洲| 久久久久国产精品厨房| 成人精品小蝌蚪| 欧美一区二区三区系列电影| 毛片av一区二区| 久久亚洲图片| 亚洲成人自拍一区| 99精品热视频只有精品10| 欧美国产激情一区二区三区蜜月| 国产乱人伦精品一区二区在线观看| 欧洲av在线精品| 美女在线视频一区| 色偷偷88欧美精品久久久| 三级影片在线观看欧美日韩一区二区| 中国成人亚色综合网站| 亚洲美女区一区| 日韩亚洲国产欧美| 亚洲主播在线观看| 午夜一区不卡| 青青草国产成人av片免费| 欧美亚洲综合久久| 精品一区二区在线观看| 欧美一区二区三区免费观看视频| 国产精品亚洲第一| 欧美mv日韩mv国产网站app| 91亚洲精品一区二区乱码| 国产视频一区二区在线| 激情综合电影网| 亚洲一区二区三区中文字幕| 亚洲欧美高清| 免费人成精品欧美精品| 欧美三级电影一区| 国产精品一区二区不卡| 欧美一区二区三区啪啪| 不卡的av网站| 久久久777精品电影网影网 | 91视频国产观看| 久久久久久久久久久99999| 91视频免费播放| 综合电影一区二区三区| 国产欧美日韩| 亚洲国产欧美一区二区三区丁香婷| 久久一区中文字幕| 精品在线观看视频| 欧美精品一卡两卡| 99精品热视频| 中文字幕av一区二区三区| 欧美日韩四区| 亚洲精品视频在线观看免费| 久久青青草综合| 国内精品在线播放| 精品三级在线看| 欧美在线网址| 一区二区三区在线观看动漫| 亚洲欧美精品| 国产一区二区在线观看视频| 精品剧情v国产在线观看在线| 午夜精品一区二区三区四区| 亚洲视频在线一区观看| 在线视频日韩| 精品一区二区日韩| 2022国产精品视频| 宅男噜噜噜66国产日韩在线观看| 丝袜美腿亚洲一区| 欧美一级高清大全免费观看| 欧美另类一区| 日韩av不卡在线观看| 色婷婷精品大视频在线蜜桃视频| 国产高清一区日本| 国产精品福利影院| 欧美亚洲国产怡红院影院| av电影在线观看一区| 夜夜嗨av一区二区三区网页 | 69av一区二区三区| 国内揄拍国内精品久久| 亚洲成人自拍一区| 日韩亚洲欧美综合| 亚洲精品资源| 国产一二精品视频| 亚洲欧洲国产日韩| 欧美日韩另类一区| 在线电影一区| 蜜桃精品视频在线| 久久亚洲综合色一区二区三区 | 国产一二三精品| 国产精品第四页| 欧美日韩亚洲综合在线 | 成人综合在线视频| 中文字幕一区日韩精品欧美| 蜜桃精品久久久久久久免费影院| 成人激情综合网站| 午夜久久久久久久久久一区二区| 欧美一区二区三区的| 一区二区三区四区五区在线| 国产成人精品免费网站| 亚洲国产美女搞黄色| 国产调教视频一区| 欧美日韩一区国产| 国产精品美女xx| 91免费看`日韩一区二区| 蜜桃精品在线观看| 亚洲天堂成人在线观看| 91麻豆精品91久久久久同性| 久久riav二区三区| 国产在线成人| 成人av在线电影| 日韩精品一二三四| 国产精品丝袜在线| 欧美一区二区三区人| 色婷婷综合久久久久中文一区二区| 欧美三区美女| 国产成人精品午夜视频免费| 丝袜脚交一区二区| 中文字幕综合网| 久久精品亚洲麻豆av一区二区| 欧美午夜不卡视频| 国产精品久久久亚洲一区| 欧美96在线丨欧| 国产一区二区三区美女|