f:convertNumbers被舍入/显示不正确

时间:2016-07-26 15:49:21

标签: jsf jsf-2 rounding currency-formatting

我在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但这些甚至不是这里的情况。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

您必须在显示之前缩放十进制数,最好使用 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>

答案 1 :(得分:0)

舍入问题不在JSF中,它最有可能在你的支持bean中......正如@Ravi所述:

  

“尝试使用具有适当精度的BigDecimal。”