更新時(shí)間:2022-10-12 10:38:49 來源:動(dòng)力節(jié)點(diǎn) 瀏覽3296次
在 Java 中,當(dāng)我們?cè)谧兞壳笆褂秒p精度數(shù)據(jù)類型時(shí),它表示小數(shù)點(diǎn)后 15 位。但有時(shí)我們只需要小數(shù)點(diǎn)后兩位小數(shù),比如代表盧比和其他單位。因此,在本節(jié)中,我們將討論顯示雙精度至小數(shù)點(diǎn)后兩位的方法以及適當(dāng)?shù)氖纠?Java 程序。
Java 提供了以下三種方法來顯示 2 位小數(shù)的雙精度:
使用 DecimalFormat ("0.00")
使用 String.format() 方法 ("%.2f")
使用 BigDecimal
讓我們一一討論上述方法。
Java DecimalFormat是 NumberFormat 類的具體子類,用于格式化十進(jìn)制數(shù)。該類提供了setRoundingMode()方法來顯示最多兩位小數(shù)的雙精度數(shù)。
句法:
公共無效 setRoundingMode(RoundingMode 舍入模式)
它接受舍入模式作為參數(shù)并覆蓋NumberFormat類的 setRoundingMode() 方法。如果我們沒有指定任何 roundingMode ,它會(huì)拋出NullPointerException 。
我們使用了 DecimalFormat 類的另一種方法是format()方法。它格式化一個(gè)字符串以產(chǎn)生一個(gè)字符串。
句法:
public StringBuffer 格式(雙 數(shù),StringBuffer 結(jié)果,F(xiàn)ieldPosition fieldPosition)
該方法接受三個(gè)參數(shù)編號(hào)、結(jié)果和位置。但最后兩個(gè)參數(shù)是可選的。它返回格式化的數(shù)字字符串。如果RoundingMode設(shè)置為UNNECESSARY,該方法將引發(fā)ArithmeticException 。
TwoDecimalPlace1.java
導(dǎo)入 java.math.RoundingMode;
導(dǎo)入 java.text.DecimalFormat;
公共類 TwoDecimalPlace1
{
// DecimalFormat 類的構(gòu)造函數(shù)
私有靜態(tài)最終 DecimalFormat decfor = new DecimalFormat( "0.00" );
公共靜態(tài)無效 主(字符串參數(shù) [])
{
//定義一個(gè)double類型的數(shù)字
雙 數(shù) = 123.9876543567 ;
System.out.println( "雙數(shù):" + num);
System.out.println( "雙數(shù):" + decfor.format(num)); //123.99
//十進(jìn)制格式,默認(rèn)為RoundingMode.HALF_EVEN
decfor.setRoundingMode(RoundingMode.DOWN);
System.out.println( "\n四舍五入前:" + decfor.format(num)); //123.98
decfor.setRoundingMode(RoundingMode.UP);
System.out.println( "四舍五入后:" + decfor.format(num)); //123.99
}
}
輸出:
雙號(hào):123.9876543567
雙數(shù):123.99
舍入前:123.98
四舍五入后:123.99
Java 還提供了 format() 方法來格式化數(shù)字。它屬于 String 類。通過使用該方法,可以相應(yīng)地格式化任何數(shù)字和字符串。
為了將數(shù)字更改為最多兩位小數(shù),我們使用%.2f來格式化數(shù)字。請(qǐng)注意,我們不能在 String.format() 方法中四舍五入,總是四舍五入。
句法:
公共靜態(tài) 字符串格式(字符串格式,對(duì)象... args)
該方法接受以下兩個(gè)參數(shù):
格式:這是我們想要的格式化字符串。
args:這些是格式字符串中格式說明符引用的參數(shù)。
它返回格式化的字符串。如果格式字符串包含非法語法,則拋出IllegalFormatException 。如果我們將格式指定為 null,它也會(huì)拋出NullPointerException 。
TwoDecimalPlace2.java
公共類 TwoDecimalPlace2
{
公共靜態(tài)無效 主(字符串參數(shù) [])
{
//定義一個(gè)double類型的數(shù)字
雙 數(shù)= 10.98765432167 ;
System.out.println( "雙數(shù):" + num);
//使用以下兩個(gè)語句中的任何一個(gè)來保留兩位小數(shù)都給出相同的結(jié)果
System.out.println( "雙數(shù):" + String.format( "%.2f" , num));
System.out.format( "雙數(shù):%.2f" , num);
}
}
輸出:
雙號(hào):10.98765432167
雙數(shù):10.99
雙數(shù):10.99
我們還可以使用 Java BigDecimal 類來顯示最多兩位小數(shù)的數(shù)字。它屬于java.math.BigDecimal包。它擴(kuò)展了 Number 類并實(shí)現(xiàn)了Comparable接口。
該類提供了 setScale() 方法。語法如下:
句法:
setScale( int newScale, RoundingMode roundingMode)
該方法接受兩個(gè)參數(shù):
newScale:要返回的 BigDecimal 值的小數(shù)位數(shù)。
roundingMode:我們要應(yīng)用的舍入模式。
它返回 BigDecimal,其標(biāo)度為指定值,其未標(biāo)度值通過將此 BigDecimal 的未標(biāo)度值乘以或除以適當(dāng)?shù)?10 次方來確定,以保持其整體值。
如果RoundingMode設(shè)置為UNNECESSARY,該方法將引發(fā)ArithmeticException。RoundingMode 是提供上述 RoundingMode 的枚舉。
我們?cè)谶@個(gè)程序中使用的另一種方法是BigDecimal.doubleValue()。它將 BigDecimal 轉(zhuǎn)換為雙精度數(shù)。讓我們看一個(gè)例子。
TwoDecimalPlace3.java
導(dǎo)入 java.math.BigDecimal;
導(dǎo)入 java.math.RoundingMode;
公共類 TwoDecimalPlace3
{
公共靜態(tài)無效 主(字符串參數(shù) [])
{
//定義一個(gè)double類型的數(shù)字
雙 數(shù)= 12.4565652239 ;
System.out.println( "雙數(shù):" + num);
BigDecimal bd = new BigDecimal(num).setScale( 2 , RoundingMode.HALF_UP);
雙 newNum = bd.doubleValue();
System.out.println( "最多保留兩位小數(shù):" + newNum);
}
}
輸出:
雙號(hào):12.4565652239
最多兩位小數(shù):12.46
相關(guān)閱讀
0基礎(chǔ) 0學(xué)費(fèi) 15天面授
有基礎(chǔ) 直達(dá)就業(yè)
業(yè)余時(shí)間 高薪轉(zhuǎn)行
工作1~3年,加薪神器
工作3~5年,晉升架構(gòu)
提交申請(qǐng)后,顧問老師會(huì)電話與您溝通安排學(xué)習(xí)
初級(jí) 202925
初級(jí) 203221
初級(jí) 202629
初級(jí) 203743