maxIntegerDigits из jsf convertNumber - PullRequest
       7

maxIntegerDigits из jsf convertNumber

1 голос
/ 23 ноября 2011

У меня странная проблема с <f:convertNumber>. Когда я устанавливаю maxIntegerDigits равным 15 и вводим, скажем, 16 из «1», я получаю правильное число с пятнадцатью «1», но если я ввожу 20 из «1», то получаю не число с пятнадцатью «1», но число с 11 "1" и 4 "0", то есть 111111111110000, и чем больше цифр я ввожу, тем менее значимые числа и больше нулей я получаю. Почему?
Вот фрагмент кода:

<a4j:region>
    <h:inputText id="numValue" value="#{MyBean.valueN}">
        <a4j:support event="onchange" limitToList="true" ajaxSingle="true" reRender="numValue"/>
        <f:convertNumber groupingUsed="false" type="number" maxIntegerDigits="15" minFractionDigits="0"/>
    </h:inputText>
</a4j:region>

MyBean.valueN - это java.lang.Double.

1 Ответ

2 голосов
/ 23 ноября 2011

Такова природа чисел с плавающей запятой IEEE 754.Наибольшее значение, которое может содержать double, равно 1.7976931348623157e308 с этой целочисленной точностью.Все, что выходит за пределы этой целочисленной точности, будет округлено.

Вы хотите использовать вместо java.math.BigDecimal.Таким образом, ваш <f:convertNumber> будет работать так, как задумано.

...