首页 文章

如何将DecimalFormat的小数分隔符从逗号更改为点/点?

提问于
浏览
176

我有一个小的疯狂方法,将BigDecimal值转换为漂亮可读的字符串 .

private String formatBigDecimal(BigDecimal bd){
    DecimalFormat df = new DecimalFormat();
    df.setMinimumFractionDigits(3);
    df.setMaximumFractionDigits(3);
    df.setMinimumIntegerDigits(1);
    df.setMaximumIntegerDigits(3);
    df.setGroupingSize(20);
    return df.format(bd);
}

然而,它还产生了一个所谓的分组分隔符 "," ,使我的所有值都出现如下:

xxx,xxx

我确实需要分隔符是点或点而不是逗号 . 有没有人知道如何完成这个小壮举?

我现在已经阅读了this,特别是this但是我找不到办法来完成这件事 . 我是以错误的方式接近这个吗?这样做有更优雅的方式吗?甚至可能是一个解决不同本地数字表示的解决方案,因为逗号将完全符合欧洲标准 .

6 回答

  • 3

    您可以通过设置区域设置或使用DecimalFormatSymbols来更改分隔符 .

    如果要将分组分隔符作为一个点,则可以使用欧洲语言环境:

    NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN);
    DecimalFormat df = (DecimalFormat)nf;
    

    或者,您可以使用DecimalFormatSymbols类更改格式方法生成的格式化数字中出现的符号 . 这些符号包括小数分隔符,分组分隔符,减号和百分号等等:

    DecimalFormatSymbols otherSymbols = new DecimalFormatSymbols(currentLocale);
    otherSymbols.setDecimalSeparator(',');
    otherSymbols.setGroupingSeparator('.'); 
    DecimalFormat df = new DecimalFormat(formatString, otherSymbols);
    

    currentLocale可以从Locale.getDefault()获得,即:

    Locale currentLocale = Locale.getDefault();
    
  • -3

    欧洲非常庞大 . 我不确定他们是否全都使用相同的格式 . 但是thisthis答案会有所帮助 .

    String text = "1,234567";
    NumberFormat nf_in = NumberFormat.getNumberInstance(Locale.GERMANY);
    double val = nf_in.parse(text).doubleValue();
    
    NumberFormat nf_out = NumberFormat.getNumberInstance(Locale.UK);
    nf_out.setMaximumFractionDigits(3);
    String output = nf_out.format(val);
    

    即使用正确的区域设置 .

  • 278
    public String getGermanCurrencyFormat(double value) {
        NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMAN);
        nf.setGroupingUsed(true);
        return "€ " + nf.format(value);
    }
    
  • 5

    BigDecimal似乎不尊重区域设置 .

    Locale.getDefault(); //returns sl_SI
    

    斯洛文尼亚语语言环境应该有一个小数点逗号 . 猜猜我对数字有一些奇怪的误解 .

    a = new BigDecimal("1,2") //throws exception
    a = new BigDecimal("1.2") //is ok
    
    a.toPlainString() // returns "1.2" always
    

    我编辑了我的一部分消息,因为它被证明是由于人为错误(忘记提交数据并且看错了),因此没有任何意义 .

    对于任何Java .toString()函数,可以说与BigDecimal相同 . 我想这在某些方面很好 . 序列化例如或调试 . 有一个唯一的字符串表示 .

    另外正如其他人提到的使用格式化工作正常 . 只需使用格式化程序,同样适用于JSF前端,格式化程序可以正常工作并了解区域设置 .

  • 12
    String money = output.replace(',', '.');
    
  • 8

    只需替换' . '在UI端使用','

    import java.text.DecimalFormat;
    public MyClass{
        private String netAmount;
        private static DecimalFormat twoDecimalForm = new DecimalFormat("00.00");
    
        public MyClass(double amount){
            //converting to required decimal format in constructor or/and setter
            this.amount=twoDecimalForm.format(amount);
        }
    
        public String getAmount() {
            //replacing decimal point with  comma so that in JSP ELs you'll get it in comma format
            return amount.replace(".",",");
        }
        public void setAmount(String amount) {
            this.amount = amount;
        }
    }
    

相关问题