代码之家  ›  专栏  ›  技术社区  ›  masiboo

Java浮点数(以逗号代替点)

  •  3
  • masiboo  · 技术社区  · 6 年前

    我只有芬兰语本地的浮点数。如下所示:-

      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,我想要这个数字。我怎么能用逗号代替圆点? 这是一个基本问题,它一定是早些时候问过的。但我只找到字符串数据类型。我看不到任何数字数据类型。

    4 回复  |  直到 6 年前
        1
  •  2
  •   Lino    6 年前

    当看到API只接受您的注释时 Number 它叫 Number#toString() 在上面,我只看到了一种强制执行合法显示的方法。通过使用您自己的实现 数字 覆盖了道路 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));
    
        2
  •  -1
  •   Laurenz Albe    6 年前

    示例代码:

    String number = "1000500000.574";
    double amount = Double.parseDouble(number);
    DecimalFormat formatter = new DecimalFormat("#,###.00");
    System.out.println(formatter.format(amount));
    
        3
  •  -2
  •   amaanullahkhan    6 年前

    这将帮助您了解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;
    }
    
        4
  •  -2
  •   Tony    6 年前

    您可以使用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());