1

我有一个奇怪的问题<f:convertNumber>。当我将 maxIntegerDigits 设置为 15 并输入例如 16 个“1”时,我得到正确的数字和 15 个“1”,但是如果我输入 20 个“1”,我得到的不是带有 15 个“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。

4

1 回答 1

2

这就是 IEEE 754 浮点数的本质。doublea可以容纳的最大值是1.7976931348623157e308具有该整数精度的值。超出此整数精度的任何内容都将被舍入。

您想java.math.BigDecimal改用 。这样,您<f:convertNumber>将按预期工作。

于 2011-11-23T15:35:12.047 回答