How to format double value for a given locale and number of decimal places?

后端 未结 4 1638
伪装坚强ぢ
伪装坚强ぢ 2020-12-17 15:27

How can I use NumberFormat to format a double value for a given Locale (default locale is sufficient) and for a given number of decima

相关标签:
4条回答
  • 2020-12-17 15:33

    If you care to read NumberFormat's documentation, the solution would be obvious:

    double d1 = 123456.78;
    double d2 = 567890;
    // self commenting issue, the code is easier to understand
    Locale fmtLocale = Locale.getDefault(Category.FORMAT);
    NumberFormat formatter = NumberFormat.getInstance(fmtLocale);
    formatter.setMaximumFractionDigits(2);
    formatter.setMinimumFractionDigits(2);
    System.out.println(formatter.format(d1));
    System.out.println(formatter.format(d2));
    System.out.println(fmtLocale.toLanguageTag());
    

    On my machine this prints out:

    123 456,78
    567 890,00
    pl-PL

    I believe this is what you are looking for, and you don't have to mess-up with patterns. I wouldn't do that - for instance there are locales which group digits by two, not by three (this is the reason we talk about grouping separator and not thousands separator).

    0 讨论(0)
  • 2020-12-17 15:45

    Adapted from Customizing Formats,

      public void localizedFormat(double value,Locale loc ) {
    
      NumberFormat nf = NumberFormat.getNumberInstance(loc);
      DecimalFormat df = (DecimalFormat)nf;
      df.applyPattern("###,###.00");
      String output = df.format(value);
    
      }
    

    This function should give you the required formatting.

    0 讨论(0)
  • 2020-12-17 15:51

    You could use something like

    DecimalFormat formatter = (DecimalFormat) DecimalFormat.getInstance();
    formatter.applyPattern("#,###,##0.00");
    formatter.format(yourDoubleHere)
    
    0 讨论(0)
  • 2020-12-17 15:53

    converts a double value to a double value with any number of digits after decimal. I have created this method in a Utility class to access it through out the project.

    public static double convertToDecimal(double doubleValue, int numOfDecimals)  {
            BigDecimal bd = new BigDecimal(doubleValue);
            bd = bd.setScale(numOfDecimals, BigDecimal.ROUND_HALF_UP);
            return bd.doubleValue();
        }
    
    0 讨论(0)
提交回复
热议问题