java對double型數字進行四捨五入

2021-08-29 19:10:44 字數 1656 閱讀 5728

在之前的小測試中遇到需要對double型數字進行四捨五入操作

於是在網路上得到了解決方案~ (在此感謝各位前輩的記敘 呵呵)

double unit = 12.75;

system.out.println(new bigdecimal(unit).setscale(2, bigdecimal.round_half_up));

我之前用到的樣例

public static string print(dealcontrol dc)

value += "sales tax:" + new bigdecimal(total_tax).setscale(2, bigdecimal.round_half_up) + "\n";

value += "total:" + new bigdecimal(total).setscale(2, bigdecimal.round_half_up);

return value;

}

下面引述了jdk5.0類說明

[quote]

bigdecimal 類提供以下操作:算術、標度操作、捨入、比較、雜湊演算法和格式轉換。tostring() 方法提供 bigdecimal 的規範表示形式。

bigdecimal 類使使用者能完全控制捨入行為。如果未指定捨入模式,並且無法表示準確結果,則丟擲乙個異常;否則,通過向該操作提供適當的 mathcontext 物件,可以對已選擇的精度和捨入模式執行計算。在任何情況下,可以為捨入控制提供八種捨入模式。使用此類(例如,round_half_up)中的整數欄位來表示捨入模式已過時;應改為使用 roundingmode enum(例如,roundingmode.half_up)的列舉值。

......

[/quote]

round_half_up的說明

[quote]

public static final int round_half_up

向「最接近的」數字捨入,如果與兩個相鄰數字的距離相等,則為向上捨入的捨入模式。如果捨棄部分 >= 0.5,則捨入行為與 round_up 相同;否則捨入行為與 round_down 相同。注意,這是我們大多數人在小學時就學過的捨入模式。

[/quote]

setscale的說明

[quote]

public bigdecimal setscale(int newscale,

int roundingmode)

返回乙個 bigdecimal,其標度為指定值,其非標度值通過此 bigdecimal 的非標度值乘以或除以十的適當次冪來確定,以維護其總值。如果該操作減少標度,則非標度值必須被除(而不是乘),並且該值可以更改;在這種情況下,將指定的捨入模式應用到除法中。

注意,由於 bigdecimal 物件是不可變的,此方法的呼叫不會 導致初始物件被修改,這與使用名為 setx 變異字段 x 方法的常規約定相反。相反,setscale 返回具有適當標度的物件;返回的物件不一定是新分配的。

相對於此遺留方法,應優先使用新的 setscale(int, roundingmode) 方法

[/quote]

以上不懂 可以詳細翻閱jdk文件

其實也是很簡單的 只是平時很少用,一下子也不知道怎麼用而已...

java的double型別數字計算相關

在專案中遇到乙個問題用double型別的數字 小數點後只有兩位 相加或者相減得出的結果並不是預期的結果,乘除也一樣。double d1 1.11 double d2 11.02 列印結果為 12.129999999999999 保留兩位小數 string.format 2f double decim...

java中double型資料的加減乘除

public class arith 兩個double數相減 param v1 param v2 return double public static double sub double v1,double v2 兩個double數相乘 param v1 param v2 return doubl...

java保留double型別固定小數字數的方法

方法一 用string類的format方法 例如 double x 1.23456789 system.out.println string.format 6f x 表示四捨五入保留六位小數。system.out.println string.format 3f x 表示四捨五入保留3位小數 輸出為...