fmt: formatNumber выдает исключение, если число имеет длину> = 20 цифр? - PullRequest
0 голосов
/ 30 марта 2011

У меня есть поле валюты, длина которого> 20 цифр

Например: 99999999999999999999

и когда я использовал:

<fmt:formatNumber
     value="${crudShipmentForm.invoiceVat}"
     pattern="###,###,###,###,##0.000"  />

Я получил NumberFormatException? Как я могу отформатировать это поле в валюте, используя fmt:formatNumber?

Ответы [ 4 ]

2 голосов
/ 30 марта 2011

Вы превысили максимальное значение long, равное 9223372036854775807.

Это означает, что вы используете String для удержания номера вместо BigDecimal или BigInteger.Это не только технически неправильный тип, но EL также приведёт его к long.Исправьте это соответствующим образом.

private BigDecimal invoiceVat; // And fix getter/setter as well.

или, если вы действительно не можете изменить тип по какой-то странной причине, сделайте это в получателе

public BigDecimal getInvoiceVat() {
    return new BigDecimal(invoiceVat);
}
0 голосов
/ 30 марта 2011

Полагаю, вы хотите отформатировать целые цифры в тысячи, и в этом случае следует использовать pattern="###,##0.000".

0 голосов
/ 30 марта 2011

Ваш номер слишком велик.

Вот соответствующий код от FormatNumberSupport:

if (input instanceof String) {
    try {
    if (((String) input).indexOf('.') != -1) {
                // String value is interpreted as a double
        input = Double.valueOf((String) input);
    } else {
                // String value is interpreted as a long
        input = Long.valueOf((String) input);
    }
    } catch (NumberFormatException nfe) {
    throw new JspException(
                Resources.getMessage("FORMAT_NUMBER_PARSE_ERROR", input),
        nfe);
    }
}

Ваш номер выходит за рамки long

0 голосов
/ 30 марта 2011

Вы не можете использовать NumberFormat для чисел больше Long.MAX_VALUE.Вы должны использовать DecimalFormat вместо NumberFormat class.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...