用逗号而不是点表示的Java浮点数

用逗号而不是点表示的Java浮点数,java,formatting,local,Java,Formatting,Local,我有一个芬兰本地的浮点数。情况如下:- String numberString = "1000,30"; if(numberString.contains(",")){ numberString = numberString.replaceAll(",",".").trim(); } try { Number number = Double.parseDouble(numberString); return num

我有一个芬兰本地的浮点数。情况如下:-

  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。我怎么能用逗号而不是圆点来表示数字呢?
这是一个基本问题,必须在早些时候提出。但我只找到字符串数据类型。我没有看到任何数字数据类型

当看到您的评论,即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));

这将帮助您了解区域设置的具体工作原理:

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;
}

您可以使用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());
示例代码:

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

浮点格式仅与解析和显示相关。因此,当您想要显示它时,只需要
String.format
。看看它,看看你们必须使用什么参数,来显示一个floats,实际上,我必须调用一个只接受数字的第三方API。所以我得到的输出是1000.30。该api只调用number.toString()。然后第三方api不支持本地化目前第三方api不支持本地化。否则,我不会问这个问题。提示:解析数字的正确方法是
NumberFormat.getInstance(新语言环境(“fi”,“fi”)).parse(numberString).doubleValue()
。不要替换字符!谢谢。这解决了我的问题。很酷的把戏。它对我的应用程序中的许多其他情况或其他情况都很有帮助。希望有一天API不会被更改以删除所有内容commas@CarlosHeuberger您完全正确,这是一种非常特定于API版本的方法—一些解释和文档指针会很好。