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

前端 未结 7 1490
离开以前
离开以前 2020-12-03 09:49

How do I get NumberFormat.getCurrencyInstance() to print negative USD currency values with a minus sign?

7条回答
  •  生来不讨喜
    2020-12-03 10:19

    Why poi REFUSES to support the FIRST option in excel currency formatting is beyond me!

    I don't like using the DecimalFormat for currency because your end cell value becomes a non-numeric with the introduction of the currency symbol. While working for a major financial institution, I was tasked with resolving this formatting issue. The core idea of this change is, because POI refuses to be reasonable and have comprehensive support of Excel's native options, I will infiltrate their code and change their values at the core. The following is my WORKAROUND:

    private static final String CURRENCY_FORMAT_OVERRIDE = "\"$\"#,##0.00_);-\"$\"#,##0.00";
    private static final String CURRENCY_FORMAT_TARGET = "\"$\"#,##0.00_);(\"$\"#,##0.00)";    
    
    static { // static class level initializer
        Field field = org.apache.poi.ss.usermodel.BuiltinFormats.class.getDeclaredField("_formats");            
        field.setAccessible(true);
        String[] _formats = (String[])field.get(new org.apache.poi.ss.usermodel.BuiltinFormats());
        for(int i = 0; i < _formats.length; ++i) {
            if(_formats[i].equals(CURRENCY_FORMAT_TARGET)) {
                _formats[i]=CURRENCY_FORMAT_OVERRIDE;
                System.out.println("TAKE THAT, POI!!!");
            }
        }
    }
    

提交回复
热议问题