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

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

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

瀏覽:117日期: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
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩国产一区| 欧美激情视频一区二区三区免费| 成人国产精品久久| 久久久久九九精品影院| 久久精品二区亚洲w码| 精品视频一区二区三区在线观看| 久久影院资源站| 岛国精品一区| а√天堂中文在线资源8| 桃色av一区二区| 国产二区精品| 免费日本视频一区| 亚洲精品无播放器在线播放| 日韩一区二区三区精品| 88久久精品| 久久97视频| 久久激情网站| 日本大胆欧美人术艺术动态| 欧美天堂一区二区| 成人国产精品| 图片区亚洲欧美小说区| 天堂精品久久久久| 精品久久不卡| 欧美日韩少妇| 国产日产高清欧美一区二区三区| 国产成人1区| 免费精品国产| 亚洲精品极品| 精品亚洲免a| 亚洲激情久久| 欧美一级全黄| 色老板在线视频一区二区| 香蕉精品999视频一区二区| 青青在线精品| 麻豆精品蜜桃| 日精品一区二区三区| 成人精品国产亚洲| 久久xxxx精品视频| 久久影院一区二区三区| 亚州av乱码久久精品蜜桃| 亚洲精品美女91| 日本一二区不卡| 免费日韩av片| 精品一区电影| 美女网站久久| 国产成人黄色| 蜜臀久久99精品久久久画质超高清| 国产精品蜜月aⅴ在线| 久久久久国产精品一区二区| 亚州国产精品| 综合日韩av| 亚洲精品成a人ⅴ香蕉片| 精品久久中文| 亚洲天堂av资源在线观看| 日本黄色精品| 亚洲啊v在线免费视频| 日韩久久精品| 欧美一级一区| 亚洲国产成人精品女人| 麻豆成人综合网| 免费观看在线综合| 久久毛片亚洲| 久久精品99国产精品| 91精品成人| 久久精品国产亚洲一区二区三区| 久久成人一区| 国产美女高潮在线| 欧美专区一区| 香蕉久久国产| 少妇精品导航| 精品香蕉视频| 欧美精品福利| 久久国产高清| 亚洲爱爱视频| 另类综合日韩欧美亚洲| 日韩一区欧美二区| 日韩不卡视频在线观看| 欧美黑人巨大videos精品| 亚洲最新av| 国产字幕视频一区二区| 激情不卡一区二区三区视频在线| 日韩欧美激情| 亚洲色诱最新| 欧美日韩一二三四| 超碰在线99| 国产精品99久久免费观看| 日韩一区二区三免费高清在线观看 | 999国产精品视频| 国产精品天天看天天狠| 亚洲久久视频| 中文在线一区| 亚洲网站视频| 韩国三级一区| 精品国产一区二区三区av片| 日本a口亚洲| 亚洲一区二区免费在线观看| 久久精品国产亚洲夜色av网站| 精品视频一区二区三区在线观看| 日韩高清在线一区| 综合亚洲视频| 免费成人在线视频观看| 9国产精品视频| 激情自拍一区| 欧洲激情综合| 好看不卡的中文字幕| 久久高清精品| 久久人人88| 1024精品一区二区三区| 99精品小视频| 欧美成人高清| 久久久久免费av| 成人精品中文字幕| 久久国产毛片| 国产一区二区中文| 亚洲精品成人| 亚洲欧美网站| 久久亚洲视频| 免费久久99精品国产| 久久高清一区| 亚洲精品国模| 91欧美精品| 国产精品一区二区美女视频免费看 | 国产精品一区二区美女视频免费看| 91成人在线| 国产美女亚洲精品7777| 国产精品对白| 精品亚洲精品| 亚洲国产欧美日本视频| 亚洲成人av观看| 亚洲网站视频| 视频在线观看一区二区三区| 国产偷自视频区视频一区二区| 久久不射中文字幕| 亚洲一二三区视频| 日韩高清不卡在线| 69堂免费精品视频在线播放| 欧美精品国产| 国产极品久久久久久久久波多结野| 麻豆久久一区二区| 国产黄大片在线观看| 久久青草久久| 亚洲专区一区| 97se亚洲| 国产一区三区在线播放| 欧美精品资源| 国产精品呻吟| 亚洲精品日韩久久| 欧美91在线| 久久久久国产| 亚洲+小说+欧美+激情+另类| 欧美精品不卡| 91精品久久久久久久久久不卡| 丝袜美腿一区二区三区| 国产亚洲久久| 日本不良网站在线观看| 红桃视频欧美| 日韩精品欧美精品| 国产极品模特精品一二| 亚洲永久av| 久久国产精品99国产| 久久精品超碰| 国产欧洲在线| 日韩在线观看一区二区| 国产精品欧美日韩一区| 欧美日韩精品免费观看视欧美高清免费大片| 亚洲欧洲另类| 国产精品亚洲片在线播放| 日韩成人亚洲| 日韩国产91| 精品日韩视频| 日产欧产美韩系列久久99| 国产91在线精品| 久热综合在线亚洲精品| 久久亚洲资源中文字| 亚洲女同一区| 美女国产一区二区三区| 免费观看久久av| 欧美日韩黄网站| 亚洲黑丝一区二区| 国产精品久久久久久久久久妞妞| 99热国内精品| 国产精品一在线观看| 99久久精品网| 国产精品久久久网站| 伊人久久亚洲美女图片| 久久精品理论片| 亚洲三级毛片| 成人在线网站| 国产精品网站在线看| 99re国产精品| 精品国产乱码久久久| 亚洲在线一区| 97在线精品| 97久久亚洲| 午夜免费一区| 国产精品videosex极品| 免费视频久久| 国产超碰精品| 国产精品va视频| 午夜在线精品|