Format a number with leading sign

后端 未结 4 1720
耶瑟儿~
耶瑟儿~ 2020-12-05 06:39

How do I format in Java a number with its leading sign?

Negative numbers are correctly displayed with leading -, but obviously positive numbers are not

相关标签:
4条回答
  • 2020-12-05 06:43

    API for Formatter provides an example:

    Formatter formatter = new Formatter();
    System.out.println(formatter.format(Locale.FRANCE, "e = %+10.4f", Math.E));
    //e =    +2,7183
    
    0 讨论(0)
  • 2020-12-05 06:49

    It requires a little tweaking of the DecimalFormat returned by NumberFormat.getCurrencyInstance() to do it in a locale-independent manner. Here's what I did (tested on Android):

    DecimalFormat formatter = (DecimalFormat)NumberFormat.getCurrencyInstance();
    String symbol = formatter.getCurrency().getSymbol();
    formatter.setNegativePrefix(symbol+"-");
    // or "-"+symbol if that's what you need
    formatter.setNegativeSuffix("");
    

    IIRC, Currency.getSymbol() may not return a value for all locales for all systems, but it should work for the major ones (and I think it has a reasonable fallback on its own, so you shouldn't have to do anything)

    ageektrapped

    Source: Format negative amount of USD with a minus sign, not brackets (Java)

    0 讨论(0)
  • 2020-12-05 06:55

    Use a negative subpattern, as described in the javadoc for DecimalFormat.

    DecimalFormat fmt = new DecimalFormat("+#,##0.00;-#");
    System.out.println(fmt.format(98787654.897));
    System.out.println(fmt.format(-98787654.897));
    

    produces (in my French locale where space is the grouping separator and the comma is the decimal separator) :

    +98 787 654,90
    -98 787 654,90
    
    0 讨论(0)
  • 2020-12-05 07:09

    I did:

    private NumberFormat plusMinusNF = new DecimalFormat("+#;-#");
    
    Integer newBalance = (Integer) binds.get("newBalance");
    bindsForUpdate.put("plusMinus", plusMinusNF.format(newBalance));
    

    which formatted positive integers, e.g. 5 to "+5" and negative integers, e.g -7 to "-7" (as expected)

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