f: convertNumbers取整/显示错误



我在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实际上为9405,我验证了这是计算的值。显示它应该是9,41,但它只显示9,40以上。然而,更奇怪的是,加上49,50,就得到了49,50+9405=58,91的右边(四舍五入显示)。因此,很明显,对于丢失的一分钱来自哪里的客户来说,这将是非常令人困惑的。显然,可能存在无法避免的情况,例如Vfat是?,006,ItemPrice为?,004总结了一下?,01但这里甚至不是这样。

有什么想法吗?

在显示十进制数之前,您必须缩放它们,最好使用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中,它很可能在您的backingbean中。。。正如@Ravi所说:

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

相关内容

  • 没有找到相关文章

最新更新