Java - always keep two decimal places even in zeroes

后端 未结 5 844
无人及你
无人及你 2021-01-01 01:48

I am trying to keep two decimal places, even if then numbers are zeroes, using DecimalFormatter:

DecimalFormat df = new DecimalFormat(\"#.00\");         


        
相关标签:
5条回答
  • 2021-01-01 02:01
    m_interest = Double.valueOf(String.format("%.2f", sum));
    
    0 讨论(0)
  • 2021-01-01 02:08

    Use BigDecimal instead, which supports the formatting approach you seek.

    This question details it: How to print formatted BigDecimal values?

    0 讨论(0)
  • 2021-01-01 02:19

    It is because you are using Double.valueOf on the DecimalFormat and it is converting the formatted number back to a double, therefore eliminating the trailing 0s.

    To fix this, only use the DecimalFormat when you are displaying the value.

    If you need m_interest calculations, keep it as a regular double.

    Then when displaying, use:

    System.out.print(df.format(m_interest));
    

    Example:

    DecimalFormat df = new DecimalFormat("#.00");
    double m_interest = 1000;
    System.out.print(df.format(m_interest)); // prints 1000.00
    
    0 讨论(0)
  • 2021-01-01 02:19

    DecimalFormat and NumberFormat should work just fine. A currency instance could work even better:

    import java.text.DecimalFormat;
    import java.text.NumberFormat;
    
    public class Foo {
       public static void main(String[] args) {
          DecimalFormat df = new DecimalFormat("#0.00");
    
          NumberFormat nf = NumberFormat.getInstance();
          nf.setMinimumFractionDigits(2);
          nf.setMaximumFractionDigits(2);
    
          NumberFormat cf = NumberFormat.getCurrencyInstance();
    
          System.out.printf("0 with df is: %s%n", df.format(0));
          System.out.printf("0 with nf is: %s%n", nf.format(0));
          System.out.printf("0 with cf is: %s%n", cf.format(0));
          System.out.println();
          System.out.printf("12345678.3843 with df is: %s%n",
                df.format(12345678.3843));
          System.out.printf("12345678.3843 with nf is: %s%n",
                nf.format(12345678.3843));
          System.out.printf("12345678.3843 with cf is: %s%n",
                cf.format(12345678.3843));
       }
    }
    

    This would output:

    0 with df is: 0.00
    0 with nf is: 0.00
    0 with cf is: $0.00
    
    12345678.3843 with df is: 12345678.38
    12345678.3843 with nf is: 12,345,678.38
    12345678.3843 with cf is: $12,345,678.38
    
    0 讨论(0)
  • 2021-01-01 02:19

    Why don't you simply Math.round(value * 100) / 100.0 ?

    0 讨论(0)
提交回复
热议问题