【问题标题】:Java Decimal Format issue zero (0.00)Java 十进制格式问题零 (0.00)
【发布时间】:2015-08-28 10:38:43
【问题描述】:

我的格式化程序有问题,当我给出 0.00 返回 +0,00 E 但我想要 0,00 E。

String PATTERN = "###,##0.00\u00a0\u00A4";
DecimalFormatSymbols SYMBOLS = DecimalFormatSymbols.getInstance(Locale.FRANCE);
DecimalFormat FORMATTER_SIGN = new DecimalFormat(PATTERN, SYMBOLS);
FORMATTER_SIGN.setNegativePrefix("-\u00a0");
FORMATTER_SIGN.setPositivePrefix("+\u00a0");
FORMATTER_SIGN.format("0.00") // this

【问题讨论】:

  • FORMATTER_SIGN.format(0)
  • 我不想只归零

标签: java decimalformat


【解决方案1】:

您可以创建自己的知道零的 DecimalFormat(简化示例):

class ZeroAwareDecimalFormat extends DecimalFormat {
    private final DecimalFormat zeroFormat;

    public ZeroAwareDecimalFormat(String posNegPattern, String zeroPattern) {
        super(posNegPattern);
        zeroFormat = new DecimalFormat(zeroPattern);
    }

    @Override
    public StringBuffer format(long number, StringBuffer result, FieldPosition fieldPosition) {
        if (number == 0L) {
            return zeroFormat.format(number, result, fieldPosition);
        } else {
            return super.format(number, result, fieldPosition);
        }
    }

    // Override the other methods accordingly.
    // set... methods should be propagated to super and zeroFormat.
}

【讨论】:

    【解决方案2】:

    删除线时可以去掉“+”

    FORMATTER_SIGN.setPositivePrefix("+\u00a0");
    

    或者改成

    FORMATTER_SIGN.setPositivePrefix("");
    

    导致

    0,00 欧元

    PS:你的format 电话对我不起作用,我需要这样做:

    FORMATTER_SIGN.format(Double.valueOf("0.00")); // this
    

    【讨论】:

    • 对于大于零的数字,应出现加号。例如 0,00 + 12,43 - 232,54 + 5 435,33
    • @Tomas 好吧,这是您的问题中缺少的关键要求。
    猜你喜欢
    • 2016-03-13
    • 2013-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多