日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

java bigdecimal赋值_Java中BigDecimal类介绍及用法(亲测)

發布時間:2024/9/20 java 28 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java bigdecimal赋值_Java中BigDecimal类介绍及用法(亲测) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Java中提供了大數字(超過16位有效位)的操作類,即 java.math.BinInteger 類和 java.math.BigDecimal 類,用于高精度計算.

其中 BigInteger 類是針對大整數的處理類,而 BigDecimal 類則是針對大小數的處理類.

BigDecimal 類的實現用到了 BigInteger類,不同的是 BigDecimal 加入了小數的概念.

float和Double只能用來做科學計算或者是工程計算;在商業計算中,對數字精度要求較高,必須使用 BigInteger 類和 BigDecimal 類,它支持任何精度的定點數,可以用它來精確計算貨幣值.

BigDecimal類創建的是對象,不能使用傳統的+、-、*、/等算術運算符直接對其進行數學運算,而必須調用其對應的方法.方法的參數也必須是BigDecimal類型的對象.

一、構造BigDecimal 對象常用方法

1、方法一

BigDecimal BigDecimal(double d); //不允許使用

2、方法二

BigDecimal BigDecimal(String s); //常用,推薦使用

3、方法三

static BigDecimal valueOf(double d); //常用,推薦使用

注意:

1. double 參數的構造方法,不允許使用!!!!因為它不能精確的得到相應的值,值會變大;

2. String 構造方法是完全可預知的: 寫入 new BigDecimal("0.1") 將創建一個 BigDecimal,它正好等于預期的0.1; 因此,通常建議優先使用 String 構造方法;

3. 靜態方法 valueOf(double val) 內部實現,仍是將 double 類型轉為 String 類型; 這通常是將 double(或float)轉化為 BigDecimal 的首選方法;

測試代碼如下:

packagecom.qiyuan.util;importjava.math.BigDecimal;public classorderCode {public static voidmain(String[] args) {double d1 = 0.10334;double d2 = 1234.0;

System.out.println("new BigDecimal("+d1+")=" + new BigDecimal(d1)); //此種方式絕對不允許!!!!!

System.out.println("new BigDecimal("+d2+")=" + new BigDecimal(d2)); //此種方式絕對不允許!!!!!

System.out.println("");

System.out.println("new BigDecimal(String.valueOf("+d1+"))=" + newBigDecimal(String.valueOf(d1)));

System.out.println("new BigDecimal(String.valueOf("+d2+"))=" + newBigDecimal(String.valueOf(d2)));

System.out.println("");

System.out.println("new BigDecimal(String.valueOf("+d1+"))=" + newBigDecimal(Double.toString(d1)));

System.out.println("new BigDecimal(String.valueOf("+d2+"))=" + newBigDecimal(Double.toString(d2)));

System.out.println("");

System.out.println("BigDecimal.valueOf("+d1+")=" +BigDecimal.valueOf(d1));

System.out.println("BigDecimal.valueOf("+d2+")=" +BigDecimal.valueOf(d2));

System.out.println("");

BigDecimal b1= BigDecimal.valueOf(1);

BigDecimal b2= BigDecimal.valueOf(1.00000);

System.out.println(b1.equals(b2));

System.out.println(b1.compareTo(b2));

}

}

輸出如下:

new BigDecimal(0.10334)=0.10334000000000000130118138486068346537649631500244140625

new BigDecimal(1234.0)=1234

new BigDecimal(String.valueOf(0.10334))=0.10334

new BigDecimal(String.valueOf(1234.0))=1234.0

new BigDecimal(String.valueOf(0.10334))=0.10334

new BigDecimal(String.valueOf(1234.0))=1234.0BigDecimal.valueOf(0.10334)=0.10334BigDecimal.valueOf(1234.0)=1234.0

false

0

二、BigDecimal保留小數位

public static void main(String[] args) throwsIllegalAccessException {
BigDecimal decimal= new BigDecimal("1.12345");

System.out.println(decimal);

BigDecimal setScale= decimal.setScale(4,BigDecimal.ROUND_HALF_DOWN);

System.out.println(setScale);

BigDecimal setScale1= decimal.setScale(4,BigDecimal.ROUND_HALF_UP);

System.out.println(setScale1);

}

參數定義

ROUND_CEILING

Rounding mode to round towards positive infinity.

向正無窮方向舍入

ROUND_DOWN

Rounding mode to round towards zero.

向零方向舍入

ROUND_FLOOR

Rounding mode to round towards negative infinity.

向負無窮方向舍入

ROUND_HALF_DOWN

Rounding mode to round towards"nearest neighbor" unless both neighbors are equidistant, in which caseround down.

向(距離)最近的一邊舍入,除非兩邊(的距離)是相等,如果是這樣,向下舍入, 例如1.55 保留一位小數結果為1.5ROUND_HALF_EVEN

Rounding mode to round towards the"nearest neighbor" unless both neighbors are equidistant, in which case, round towards the even neighbor.

向(距離)最近的一邊舍入,除非兩邊(的距離)是相等,如果是這樣,如果保留位數是奇數,使用ROUND_HALF_UP ,如果是偶數,使用ROUND_HALF_DOWN

ROUND_HALF_UP

Rounding mode to round towards"nearest neighbor" unless both neighbors are equidistant, in which caseround up.

向(距離)最近的一邊舍入,除非兩邊(的距離)是相等,如果是這樣,向上舍入,1.55保留一位小數結果為1.6ROUND_UNNECESSARY

Rounding mode toassertthat the requested operation has an exact result, hence no rounding is necessary.

計算結果是精確的,不需要舍入模式

ROUND_UP

Rounding mode to round away from zero.

向遠離0的方向舍入

附件1,BigDecimal 類的 valueOf()方法源碼

public static BigDecimal valueOf(doubleval) {return newBigDecimal(Double.toString(val));

}

附件2,BigDecimal類的幾個常用方法

/*** 求余數

* 返回值為 (this % divisor) 的 BigDecimal*/BigDecimal remainder(BigDecimal divisor);/*** 求相反數

* 返回值是 (-this) 的 BigDecimal*/BigDecimal negate();/*** 將此 BigDecimal 與指定的 BigDecimal 比較

* 根據此方法,值相等但具有不同標度的兩個 BigDecimal 對象(如,2.0 和 2.00)被認為是相等的;

* 相對六個 boolean 比較運算符 (, >=, !=, <=) 中每一個運算符的各個方法,優先提供此方法;

* 建議使用以下語句執行上述比較:(x.compareTo(y) 0), 其中 是六個比較運算符之一;

*

* 指定者:接口 Comparable 中的 compareTo

* 返回:當此 BigDecimal 在數字上小于、等于或大于 val 時,返回 -1、0 或 1*/

int compareTo(BigDecimal val);

附件3,提供精確的浮點數運算(包括加、減、乘、除、四舍五入)的工具類源碼

packagecom.qiyuan.util;importjava.math.BigDecimal;public classArithUtil {//除法運算默認精度

private static final int DEF_DIV_SCALE = 10;privateArithUtil() {
}/*** 精確加法*/

public static double add(double value1, doublevalue2) {
BigDecimal b1=BigDecimal.valueOf(value1);

BigDecimal b2=BigDecimal.valueOf(value2);returnb1.add(b2).doubleValue();

}/*** 精確減法*/

public static double sub(double value1, doublevalue2) {
BigDecimal b1=BigDecimal.valueOf(value1);

BigDecimal b2=BigDecimal.valueOf(value2);returnb1.subtract(b2).doubleValue();

}/*** 精確乘法*/

public static double mul(double value1, doublevalue2) {
BigDecimal b1=BigDecimal.valueOf(value1);

BigDecimal b2=BigDecimal.valueOf(value2);returnb1.multiply(b2).doubleValue();

}/*** 精確除法 使用默認精度*/

public static double div(double value1, double value2) throwsIllegalAccessException {returndiv(value1, value2, DEF_DIV_SCALE);

}/*** 精確除法

*@paramscale 精度*/

public static double div(double value1, double value2, int scale) throwsIllegalAccessException {if(scale < 0) {throw new IllegalAccessException("精確度不能小于0");

}

BigDecimal b1=BigDecimal.valueOf(value1);

BigDecimal b2=BigDecimal.valueOf(value2);//return b1.divide(b2, scale).doubleValue();

returnb1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();

}/*** 四舍五入

*@paramscale 小數點后保留幾位*/

public static double round(double v, int scale) throwsIllegalAccessException {return div(v, 1, scale);

}/*** 比較大小*/

public static booleanequalTo(BigDecimal b1, BigDecimal b2) {if(b1 == null || b2 == null) {return false;

}return 0 ==b1.compareTo(b2);

}public static void main(String[] args) throwsIllegalAccessException {double value1=1.2345678912311;double value2=9.1234567890123;

BigDecimal value3=newBigDecimal(Double.toString(value1));

BigDecimal value4=newBigDecimal(Double.toString(value2));

System.out.println("精確加法================="+ArithUtil.add(value1, value2));

System.out.println("精確減法================="+ArithUtil.sub(value1, value2));

System.out.println("精確乘法================="+ArithUtil.mul(value1, value2));

System.out.println("精確除法 使用默認精度 ================="+ArithUtil.div(value1, value2));

System.out.println("精確除法 設置精度================="+ArithUtil.div(value1, value2,20));

System.out.println("四舍五入 小數點后保留幾位 ================="+ArithUtil.round(value1, 10));

System.out.println("比較大小 ================="+ArithUtil.equalTo(value3, value4));

}

}

相關資源:BigIntegerBigDecimal使用_bigdecimal賦值初始值0,bigdecimal設置...
————————————————
版權聲明:本文為CSDN博主「weixin_39911998」的原創文章,遵循CC 4.0 BY-SA版權協議,轉載請附上原文出處鏈接及本聲明。
原文鏈接:https://blog.csdn.net/weixin_39911998/article/details/114097283

總結

以上是生活随笔為你收集整理的java bigdecimal赋值_Java中BigDecimal类介绍及用法(亲测)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 性xxxx视频 | 少妇偷人精品无码人妻 | 72pao成人国产永久免费视频 | 打屁股av | 在线免费观看污网站 | 日韩在线一二三 | 欧美成人精精品一区二区频 | 一级全黄色片 | 操比网站 | 美国黄色av | 国产精品久久久久久久久久辛辛 | 人妖和人妖互交性xxxx视频 | 亚洲蜜臀av乱码久久精品蜜桃 | 香蕉国产在线观看 | 香蕉视频日本 | 亚洲狠 | 色播网址 | 免费色站 | 噜噜噜色 | 日韩欧美a级片 | 亚洲国产综合在线 | 亚洲精品成a人在线观看 | 五月婷婷啪啪 | 久久免费一区 | 久久这里有 | 亚洲免费区 | 99草在线视频 | 少妇特黄a一区二区三区88av | 日日夜夜拍 | 日本熟妇一区二区三区四区 | 奇米精品一区二区三区在线观看 | 亚洲永久精品在线观看 | 俺去射| 欧美三级三级三级爽爽爽 | 天天干天天爽天天操 | а√中文在线资源库 | 911精品国产一区二区在线 | 操人视频网站 | 一起草最新网址 | 涩涩网站在线看 | 三级视频在线观看 | 欧美亚洲第一页 | 久久人人干 | 精品久久久久久久久久久久久久久久久 | 91国偷自产一区二区三区女王 | 伊人欧美 | 老头av | 成人免费一级视频 | 久久久噜噜噜www成人 | 久久精彩 | 福利免费视频 | 国产黄a三级三级三级看三级男男 | 久操视频免费看 | 午夜777 | 无码精品一区二区三区在线 | 泽村玲子av | 国产三级久久 | 欧美资源站 | 韩日午夜在线资源一区二区 | wwwav在线播放 | 国产喷水吹潮视频www | yy1111111| av网址在线免费观看 | 日韩乱码人妻无码系列中文字幕 | 青青在线免费观看 | 国产二级一片内射视频播放 | 午夜精品久久久久久久久久久 | 日韩av三区| 亚洲国产精品成人 | 狠狠干青青草 | 春色网站 | 91av视频网| 热久久久久久 | 黑丝袜av| 青草av在线 | 日本不卡在线视频 | 三上悠亚在线播放 | 国产精品一区在线观看你懂的 | 成人看的毛片 | 91香蕉视频官网 | 亚洲加勒比 | 日韩精品在线观看中文字幕 | 国产伦精品一区二区三区免费 | 国产美女免费网站 | 五月天一区二区 | 国产高清视频一区二区 | 国产女人18毛片水真多 | 亚洲激情视频一区 | 91网站在线播放 | 麻豆精品视频免费观看 | 国产男男chinese网站 | 欧美a视频在线观看 | 成人精品黄段子 | 日本一二三区在线 | 午夜视频福利网站 | 3d动漫精品啪啪一区二区三区免费 | 污视频在线观看免费 | 色播基地 | 越南少妇做受xxx片 亚洲av综合色区无码一二三区 |