Android格式化双精度数据

4

我想将例如 5999.635554 转换为 5 999,63。我使用了下面的 DecimalFormat 方法:

public static String decimalDoubleForm(double value){

        DecimalFormat df = new DecimalFormat("#,###,###.00");
        String formatted_value = df.format(value).replaceAll("\\.", ",");

        return formatted_value;

}

然而,当我使用Util.decimalDoubleForm(value); 来处理 -4000.4343 时,得到的结果是 -4,000,43

我的期望结果是 -4000.4343 => -4 000,43


尝试在您的DecimalFormat中使用字符串 # ###,###.00 - Brian Hannay
以下链接可能会有所帮助:http://stackoverflow.com/questions/9081814/how-to-specify-decimal-delimiter祝你好运^^ - reidzeibel
你愿意使用德国格式来格式化价格吗? - Lalit Poptani
1个回答

2
如果您想将format()调用的字符串-4,000.43转换为-4 000,43,可以进行两个替换。第一个是将所有的,字符替换为空格,然后将所有的.字符替换为,。请保留HTML标签。
String formatted_value = df.format(value)
    .replaceAll(","  , " ")
    .replaceAll("\\.", ",");

当你想要交换逗号,.(a)时,这会变得棘手,但你仍然可以通过一个三步骤的过程来实现:

comma  => X
period => comma
X      => period

(其中X是任何字符串中不会出现的字符,例如"X")。

但是,可能已经有一种格式字符串可以使用,而无需进行字符串替换。从这里得知,特殊字符是本地化的,因此应该有一种方法根据语言环境创建具有特定DecimalFormatSymbolDecimalFormat

至少在Java中是这样的。至于Java Android是否可以做到相同的事情,我不确定。他们以前在国际化方面采取了不同的策略。


(a)可恶的欧洲人和他们奇怪的数字格式:-)


@ paxdiablo说:“可能已经有可以用于此目的的格式化字符串,而不需要使用字符串替换。” 你知道在哪里可以找到这个功能吗? - Dimitri
@Dimitri,我展示了Java类,可以使用DecimalFormat(DecimalFormatSymbols(Locale))来完成它。但我不确定Android是否支持它。恐怕你必须自己验证一下。如果不可用,多个replaceAll()解决方案应该可以工作,尽管它很丑陋。 - paxdiablo
@ paxdiablo:谢谢,我用 .replaceAll("," , " ") 和 .replaceAll("\.", ",") 得到了想要的结果。 - Dimitri

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接