簡體   English   中英

即使指定的模式是點,DecimalFormat 也使用逗號分隔符

[英]DecimalFormat uses comma separator even when the pattern specified is a dot

我有以下代碼用於將雙精度位格式化為兩位小數;

DecimalFormat df = new DecimalFormat("0.00");
double monthlyVal = forecastReturnValue / months;
return Double.valueOf(df.format(monthlyVal));

最后一行以NumberFormatException失敗,因為小數用逗號分隔;

截屏

我正在使用 windows OpenJDK8:

openjdk version "1.8.0_41"
OpenJDK Runtime Environment (build1.8.0_41-b04)
OpenJDK Client VM (build 25.40-b25, mixed mode)

可能是什么原因?

DecimalFormat僅用於格式化值。 Double.valueOf不知道格式並期望. 如果你想解析 duch 字符串,你必須使用DecimalFormat來解析這個值:

return df.parse(df.format(monthlyVal));

原因是Locale 默認情況下,您連接到系統上的區域設置,它返回一個小數點分隔符為, 要使用 DecimalFormat 進行更改,請執行以下操作:

DecimalFormatSymbols symbols = new DecimalFormatSymbols(Locale.US);
DecimalFormat df = new DecimalFormat("0.00", symbols);
double monthlyVal = forecastReturnValue / months;
return Double.valueOf(df.format(monthlyVal));

恕我直言,我建議在此類用例中使用 BigDecimal,因為它更准確,更不容易出錯,並且可以輕松處理舍入、縮放等的使用。

等價的可能是:

BigDecimal monthlyVal = BigDecimal.valueOf(20.0).divide(BigDecimal.valueOf(12), 2, RoundingMode.CEILING); // 2 is the scale. RoundingMode is up to you
System.out.println(monthlyVal);

當你寫new DecimalFormat("0.00"); 您沒有指定分隔符類型。 您只是指定應該有一個分隔符。 分隔符仍將基於您的語言環境。

格式化字符串我們“。” 作為小數分隔符。

如果你想使用'.' 你可以改變你的語言環境。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM