f:convertNumbers rounded/displayed 不正确
f:convertNumbers are rounded/displayed incorrectly
我在使用以下 JSF 代码的 JSF 中遇到了一些奇怪的舍入问题,因为数字加起来不正确:
<h:outputLabel value="Subtotal"/><h:outputText value="#{shoppingCart.itemsPrice}"><f:convertNumber groupingUsed="true" type="currency" currencySymbol="€"/></h:outputText>
<h:outputLabel value="Shipping"/><h:outputText value="#{shoppingCart.shippingPrice}"><f:convertNumber groupingUsed="true" type="currency" currencySymbol="€"/></h:outputText>
<h:outputLabel value="Vfat"/><h:outputText value="#{shoppingCart.vfat}"><f:convertNumber groupingUsed="true" type="currency" currencySymbol="€"/></h:outputText>
<h:outputLabel value="Total"/><h:outputText value="#{shoppingCart.totalGrossPrice}"><f:convertNumber groupingUsed="true" type="currency" currencySymbol="€"/></h:outputText>
这里是有问题的数字
- 小计 49.50 欧元
- 运费 €0.00
- Vfat 9.40 欧元
- 总计 58.91 欧元
这些数字不太正确,因为我所在国家/地区的 VFAT 是 19%,因此 VFAT 实际上是 9,405,我验证这是计算出的值。显示应该是 9,41 但上面只显示 9,40。然而,更奇怪的是,将 49,50 添加到它会得到正确的 49,50+9,405 = 58,91(四舍五入以供显示)。因此,很明显,对于缺少分钱的客户来说,这会让他们感到非常困惑。
显然,可能存在无法避免的情况,例如Vfat 是 ?,006 和 ItemPrice 是 ?,004 然后总结这个 ?,01 但这些甚至不是这里的情况。
有什么想法吗?
舍入问题不在 JSF 中,它很可能在你的支持 bean 中......正如@Ravi 所说:
"Try using BigDecimal with proper precision."
您必须在显示小数之前缩放小数,最好使用 java.math.BigDecimal 类型:
public BigDecimal getVFat2() {
return vFat.setScale(2, BigDecimal.ROUND_UP);
}
HTML:
<h:outputText value="#{shoppingCart.vFat2}">
<f:convertNumber groupingUsed="true" type="currency" currencySymbol="€" />
</h:outputText>
我在使用以下 JSF 代码的 JSF 中遇到了一些奇怪的舍入问题,因为数字加起来不正确:
<h:outputLabel value="Subtotal"/><h:outputText value="#{shoppingCart.itemsPrice}"><f:convertNumber groupingUsed="true" type="currency" currencySymbol="€"/></h:outputText>
<h:outputLabel value="Shipping"/><h:outputText value="#{shoppingCart.shippingPrice}"><f:convertNumber groupingUsed="true" type="currency" currencySymbol="€"/></h:outputText>
<h:outputLabel value="Vfat"/><h:outputText value="#{shoppingCart.vfat}"><f:convertNumber groupingUsed="true" type="currency" currencySymbol="€"/></h:outputText>
<h:outputLabel value="Total"/><h:outputText value="#{shoppingCart.totalGrossPrice}"><f:convertNumber groupingUsed="true" type="currency" currencySymbol="€"/></h:outputText>
这里是有问题的数字
- 小计 49.50 欧元
- 运费 €0.00
- Vfat 9.40 欧元
- 总计 58.91 欧元
这些数字不太正确,因为我所在国家/地区的 VFAT 是 19%,因此 VFAT 实际上是 9,405,我验证这是计算出的值。显示应该是 9,41 但上面只显示 9,40。然而,更奇怪的是,将 49,50 添加到它会得到正确的 49,50+9,405 = 58,91(四舍五入以供显示)。因此,很明显,对于缺少分钱的客户来说,这会让他们感到非常困惑。 显然,可能存在无法避免的情况,例如Vfat 是 ?,006 和 ItemPrice 是 ?,004 然后总结这个 ?,01 但这些甚至不是这里的情况。
有什么想法吗?
舍入问题不在 JSF 中,它很可能在你的支持 bean 中......正如@Ravi 所说:
"Try using BigDecimal with proper precision."
您必须在显示小数之前缩放小数,最好使用 java.math.BigDecimal 类型:
public BigDecimal getVFat2() {
return vFat.setScale(2, BigDecimal.ROUND_UP);
}
HTML:
<h:outputText value="#{shoppingCart.vFat2}">
<f:convertNumber groupingUsed="true" type="currency" currencySymbol="€" />
</h:outputText>