2013-04-10 51 views
0

我想格式化我的雙重價值,以精確小數點後2位,它似乎運作良好,這裏是我努力格式一倍至2位小數

final NumberFormat df = DecimalFormat.getInstance(); 
df.setMinimumFractionDigits(2); 
df.setMaximumFractionDigits(2); 
df.setRoundingMode(RoundingMode.DOWN); 
df.format(value) 

到目前爲止一切工作的代碼,但我需要雙倍返還價值,因爲它被用於其他計算和我試圖

Double.parseDouble(df.format(value)) 

大小數像

BigDecimal price = new BigDecimal(df.format(number)); 

但如預期 像18.50正在轉換爲18.5

雖然這不是與計算的問題,但我需要顯示在UI量在那裏我必須準確顯示最多2位小數它無法正常工作。

有什麼是我可以在java類處理,否則我要照顧在JSP與JSTL

+0

我不明白:你打印的東西不能正確打印? – 2013-04-10 07:30:30

+0

@Vakh:我告訴18.50被返回爲18.5,當轉換爲雙倍結束時 – 2013-04-10 07:31:18

+0

是[this](http://www.tutorialspoint.com/jsp/jstl_format_formatnumber_tag.htm)你在找什麼?或者你可以傳遞一個字符串到你的JSP。很難說出你想要做什麼和/或你期望什麼。 – jahroy 2013-04-10 07:33:12

回答

2

這是BigDecimal爲訂做!

BigDecimal number = new BigDecimal(123.456); 
// set 2 fraction digits 
// Note that setScale() does not change the original, 
// but returns a new BigDecimal. 
number = number.setScale(2, RoundingMode.DOWN); 
// get string representation 
String text = number.toPlainString(); 
// get double value 
double dbl = number.doubleValue(); 

並使用BigDecimal進行其他計算,如果可以的話。

+0

感謝您的輸入,但18.50的'number.doubleValue()'將返回18.5這意味着爲UI顯示我需要另一個輸入字段 – 2013-04-10 07:46:16

+1

@Umesh爲什麼你需要另一個輸入字段?雙重永遠不會是18.50使用字符串表示來代替。 – drzymala 2013-04-10 08:00:11

+1

@Umesh,我同意@martini,使用_string_來重新表達。你可以使用'DecimalFormat.applyPattern(「0.00」)'這更簡單。 – hiway 2013-04-10 08:12:10