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

歡迎訪問 生活随笔!

生活随笔

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

java

【蓝桥杯Java_C组·从零开始卷】第五节(二)、BigDecimal的使用

發布時間:2024/8/26 java 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【蓝桥杯Java_C组·从零开始卷】第五节(二)、BigDecimal的使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

不限制長度的浮點數計算【BigDecimal】

目錄

BigDecimal四則運算與取模運算

RoundingMode枚舉介紹

RoundingMode舍入模式

UP

CEILING

FLOOR

HALF_UP (Half指的中點值,例如0.5、0.05,0.15等等)

HALF_DOWN

UNNECESSARY

黃金分割?


BigDecimal四則運算與取模運算

package Action;import java.math.BigDecimal;public class demo {public static void main(String[] args) {BigDecimal x = new BigDecimal("2222");BigDecimal y = new BigDecimal("11111");// 加法BigDecimal add = x.add(y);System.out.println(add);// 減法BigDecimal subtract = x.subtract(y);System.out.println(subtract);// 乘法BigDecimal multiply = x.multiply(y);System.out.println(multiply);// 除法:divide(除數,保留小數位數,小數點處理方式)BigDecimal divide = x.divide(y,2,BigDecimal.ROUND_DOWN);System.out.println(divide);//除法取整BigDecimal divideToIntegralValue = x.divideToIntegralValue(y);System.out.println(divideToIntegralValue);//取模·余數BigDecimal remainder = x.remainder(y);System.out.println(remainder);} }

RoundingMode枚舉介紹

package java.math;public enum RoundingMode {UP(BigDecimal.ROUND_UP),DOWN(BigDecimal.ROUND_DOWN),CEILING(BigDecimal.ROUND_CEILING),FLOOR(BigDecimal.ROUND_FLOOR),HALF_UP(BigDecimal.ROUND_HALF_UP),HALF_DOWN(BigDecimal.ROUND_HALF_DOWN),HALF_EVEN(BigDecimal.ROUND_HALF_EVEN),UNNECESSARY(BigDecimal.ROUND_UNNECESSARY);final int oldMode;private RoundingMode(int oldMode) {this.oldMode = oldMode;}public static RoundingMode valueOf(int rm) {switch(rm) {case BigDecimal.ROUND_UP:return UP;case BigDecimal.ROUND_DOWN:return DOWN;case BigDecimal.ROUND_CEILING:return CEILING;case BigDecimal.ROUND_FLOOR:return FLOOR;case BigDecimal.ROUND_HALF_UP:return HALF_UP;case BigDecimal.ROUND_HALF_DOWN:return HALF_DOWN;case BigDecimal.ROUND_HALF_EVEN:return HALF_EVEN;case BigDecimal.ROUND_UNNECESSARY:return UNNECESSARY;default:throw new IllegalArgumentException("argument out of range");}} }

RoundingMode是一個枚舉類,有以下幾個值:UP,DOWN,CEILING,FLOOR,HALF_UP,HALF_DOWN,HALF_EVEN,UNNECESSARY?

ROUND_CEILING //向正無窮方向舍入
ROUND_DOWN //向零方向舍入
ROUND_FLOOR //向負無窮方向舍入
ROUND_HALF_DOWN ?//向(距離)最近的一邊舍入,除非兩邊(的距離)是相等,如果是這樣,向下舍入, 例如1.55 保留一位小數結果為1.5
ROUND_HALF_EVEN ?//向(距離)最近的一邊舍入,除非兩邊(的距離)是相等,如果是這樣,如果保留位數是奇數,使用ROUND_HALF_UP,如果是偶數,使用ROUND_HALF_DOWN
ROUND_HALF_UP ?//向(距離)最近的一邊舍入,除非兩邊(的距離)是相等,如果是這樣,向上舍入, 1.55保留一位小數結果為1.6
ROUND_UNNECESSARY //計算結果是精確的,不需要舍入模式
ROUND_UP //向遠離0的方向舍入

RoundingMode舍入模式

UP

public?final?static?int?ROUND_UP?=?0;

定義:遠離零方向舍入。

解釋:始終對非零舍棄部分前面的數字加 1。注意,此舍入模式始終不會減少計算值的絕對值。

圖示:

示例:

輸入數字使用 UP 舍入模式將輸入數字舍入為一位數
5.56
2.53
1.62
1.12
1.01
-1.0-1
-1.1-2
-1.6-2
-2.5-3
-5.5-6

DOWN

public?final?static?int?ROUND_DOWN?=?1;

定義:向零方向舍入。

解釋:從不對舍棄部分前面的數字加 1(即截尾)。注意,此舍入模式始終不會增加計算值的絕對值。

圖示:

示例:

輸入數字使用 DOWN 舍入模式將輸入數字舍入為一位數
5.55
2.52
1.61
1.11
1.01
-1.0-1
-1.1-1
-1.6-1
-2.5-2
-5.5-5

CEILING

public?final?static?int?ROUND_CEILING?=?2;

定義:向正無限大方向舍入。

解釋:如果結果為正,則舍入行為類似于 RoundingMode.UP;如果結果為負,則舍入行為類似于RoundingMode.DOWN。注意,此舍入模式始終不會減少計算值。

圖示:

示例:

輸入數字使用 DOWN 舍入模式將輸入數字舍入為一位數
5.56
2.53
1.62
1.12
1.01
-1.0-1
-1.1-1
-1.6-1
-2.5-2
-5.5-5

FLOOR

public?final?static?int?ROUND_FLOOR?=?3;

定義:向負無限大方向舍入。

解釋:如果結果為正,則舍入行為類似于 RoundingMode.DOWN;如果結果為負,則舍入行為類似于RoundingMode.UP。注意,此舍入模式始終不會增加計算值。

圖示:

示例:

輸入數字使用 DOWN 舍入模式將輸入數字舍入為一位數
5.55
2.52
1.61
1.11
1.01
-1.0-1
-1.1-2
-1.6-2
-2.5-3
-5.5-6

HALF_UP (Half指的中點值,例如0.5、0.05,0.15等等)

public?final?static?int?ROUND_HALF_UP?=?4;

定義:向最接近的數字方向舍入,如果與兩個相鄰數字的距離相等,則向上舍入。

解釋:如果被舍棄部分 >= 0.5,則舍入行為同 RoundingMode.UP;否則舍入行為同RoundingMode.DOWN。注意,此舍入模式就是通常學校里講的四舍五入。

圖示:

示例:

輸入數字使用 DOWN 舍入模式將輸入數字舍入為一位數
5.56
2.53
1.62
1.11
1.01
-1.0-1
-1.1-1
-1.6-2
-2.5-3
-5.5-6

HALF_DOWN

public?final?static?int?ROUND_HALF_DOWN?=?5;

定義:向最接近的數字方向舍入,如果與兩個相鄰數字的距離相等,則向下舍入。

解釋:如果被舍棄部分 > 0.5,則舍入行為同 RoundingMode.UP;否則舍入行為同RoundingMode.DOWN。注意,此舍入模式就是通常講的五舍六入。

圖示:

示例:

輸入數字使用 DOWN 舍入模式將輸入數字舍入為一位數
5.55
2.52
1.62
1.11
1.01
-1.0-1
-1.1-1
-1.6-2
-2.5-2
-5.5-5

HALF_EVEN

public?final?static?int?ROUND_HALF_EVEN?=?6;

定義:向最接近數字方向舍入,如果與兩個相鄰數字的距離相等,則向相鄰的偶數舍入。

解釋:如果舍棄部分左邊的數字為奇數,則舍入行為同 RoundingMode.HALF_UP;如果為偶數,則舍入行為同RoundingMode.HALF_DOWN。注意,在重復進行一系列計算時,根據統計學,此舍入模式可以在統計上將累加錯誤減到最小。此舍入模式也稱為“銀行家舍入法”,主要在美國使用。此舍入模式類似于 Java 中對float 和double 算法使用的舍入策略。

圖示:

示例:

輸入數字使用 DOWN 舍入模式將輸入數字舍入為一位數
5.56
2.52
1.62
1.11
1.01
-1.0-1
-1.1-1
-1.6-2
-2.5-2
-5.5-6

UNNECESSARY

public?final?static?int?ROUND_UNNECESSARY?=??7;

定義:用于斷言請求的操作具有精確結果,因此不發生舍入。

解釋:計算結果是精確的,不需要舍入,否則拋出 ArithmeticException。

示例:

輸入數字使用 DOWN 舍入模式將輸入數字舍入為一位數
5.5拋出 ArithmeticException
2.5拋出 ArithmeticException
1.6拋出 ArithmeticException
1.1拋出 ArithmeticException
1.01
-1.0-1
-1.1拋出 ArithmeticException
-1.6拋出 ArithmeticException
-2.5拋出 ArithmeticException
-5.5拋出 ArithmeticException

黃金分割?

黃金分割數0.618與美學有重要的關系。舞臺上報幕員所站的位置大約就是舞臺寬度的0.618處,
墻上的畫像一般也掛在房間高度的0.618處,甚至股票的波動據說也能找到0.618的影子....
黃金分割數是個無理數,也就是無法表示為兩個整數的比值。
0.618只是它的近似值,其真值可以通過對5開方減去1再除以2來獲得,
我們取它的一個較精確的近似值:0.618034
有趣的是,一些簡單的數列中也會包含這個無理數,這很令數學家震驚!
1 3 4 7 11 18 29 47 .... 稱為“魯卡斯隊列”。它后面的每一個項都是前邊兩項的和。
如果觀察前后兩項的比值,即:1/3,3/4,4/7,7/11,11/18 ... 會發現它越來越接近于黃金分割數!
你的任務就是計算出從哪一項開始,這個比值四舍五入后已經達到了與0.618034一致的精度。
請寫出該比值。格式是:分子/分母。比如:29/47

package Action;import java.math.BigDecimal;public class demo {public static double format(double d) {BigDecimal bd = new BigDecimal(d).setScale(6, BigDecimal.ROUND_HALF_UP);double dd = bd.doubleValue();//返回浮點數值return dd;}public static void f(int a, int b) {double d = format((double) a / b);if (d == 0.618034) {System.out.println(a + "/" + b + "=" + d);return;}f(b, a + b);}public static void main(String[] args) {f(1, 3);} }

?到這里,不限制長度的浮點數計算就學習完了。希望能對大家郵搜幫助。歡迎一鍵三連。

總結

以上是生活随笔為你收集整理的【蓝桥杯Java_C组·从零开始卷】第五节(二)、BigDecimal的使用的全部內容,希望文章能夠幫你解決所遇到的問題。

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