Java浮点数以逗号代替点

时间:2018-08-09 06:01:45

标签: java formatting local

所有我在芬兰语本地都有一个浮点数。就像下面这样:-

  String numberString = "1000,30";
  if(numberString.contains(",")){
        numberString = numberString.replaceAll(",",".").trim();    
    }

    try {
        Number number = Double.parseDouble(numberString);
        return number;
    }catch (NumberFormatException ex){
        System.out.printf(ex.getMessage());
    }
    return null;

但是该数字的值为1000.30。我想要这个数字我应该值1000,30。我如何用逗号而不是点号来表示数字? 这是一个必须先问过的基本问题。但是我发现的只是String数据类型。我没有看到任何Number数据类型。

4 个答案:

答案 0 :(得分:2)

当看到您的评论,即该API仅接受Number并在其上调用Number#toString()时,我仅看到一种强制执行合法显示的方法。通过使用自己的Number实现并覆盖Object#toString()的工作方式:

public class CorrectlyDisplayedDouble extends Number{
    private final Double internal;

    public CorrectlyDisplayedDouble(Double internal){
        this.internal = internal;
    }

    public int intValue(){
        return internal.intValue();
    }

    public long longValue(){
        return internal.longValue();
    }

    public float floatValue(){
        return internal.floatValue();
    }

    public double doubleValue(){
        return internal.doubleValue();
    }

    public String toString(){
        // replaces periods with commas
        return internal.toString().replace(".", ",");
    }
}

随后可以使用以下代码段轻松创建哪个代码段,然后将其传递给您的第三方API:

Number number = new CorrectlyDisplayedDouble(Double.parseDouble(numberString));

答案 1 :(得分:-1)

示例代码:

String number = "1000500000.574";
double amount = Double.parseDouble(number);
DecimalFormat formatter = new DecimalFormat("#,###.00");
System.out.println(formatter.format(amount));

答案 2 :(得分:-2)

这将帮助您了解Locale的工作原理:

public double parse(String decimalAsText) {
    NumberFormat decimalFormat = NumberFormat.getNumberInstance(Locale.FRANCE);
    decimalAsText = decimalAsText.replace(' ', '\u00a0');
    ParsePosition pp = new ParsePosition(0);
    Number n = decimalFormat.parse(decimalAsText, pp);
    return n.doubleValue();
}
public String parse(double textAsDecimal) {
    NumberFormat nf = NumberFormat.getNumberInstance(Locale.FRENCH);
    BigDecimal bd = BigDecimal.valueOf(textAsDecimal);
    nf.setMaximumFractionDigits(bd.scale());
    String s = nf.format(textAsDecimal);
    return s;
}

答案 3 :(得分:-2)

您可以使用DecimalFormat和Locale,例如:

DecimalFormat dfFrance = (DecimalFormat)DecimalFormat.getInstance(Locale.FRANCE);
dfFrance.applyPattern("###.00");
Number n = 0;
try {
    n = dfFrance.parse("1000,30");
} catch (ParseException e) {
    e.printStackTrace();
}
System.out.println(n.doubleValue());