2016-07-26 64 views
0

我遇到一些奇怪的四舍五入问题JSF使用下面的JSF代码数字加起来不正确:问题F:convertNumbers四舍五入/显示不正确

<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

这些数字不是很正确正弦正弦波在我国的国家是19%,因此VFat实际上是9405,我验证是计算的值。显示它应该是9,41,但它只显示9,40以上。然而,即使是更奇怪的是,加49,50给它右49,50 + 9,405 = 58,91(四舍五入显示)。所以很明显,对于一个缺少分数的客户来说,这会非常令人困惑。显然,在某些情况下,这是不可避免的,例如, Vfat是?,006,ItemPrice是?, 004然后总结了这个?,01但是这里甚至没有这种情况。

任何想法?

+1

尝试使用BigDecimal与适当的精度。 http://stackoverflow.com/questions/1359817/using-bigdecimal-to-work-with-currencies – Ravi

+0

谢谢拉维。通过BigDecimal,我可以得到一致的结果,即对于vfat以及总价格,0,005都被舍入。而且,当我查看这也是合法的,在我的国家以这种方式进行vfat – Tom

回答

0

的四舍五入问题并不是JSF中,这是最有可能您的支持bean中......作为@Ravi指出:“尝试使用BigDecimal与适当的精度”

+0

这不是一个支持豆的问题。这真的是显示器。 Calculaton是正确的 - 我已将净值,vfat和总价值写入我的日志并在初始时进行验证。这里的日志: [2016-07-27T10:53:19.549 + 0200] [glassfish 4.1] [INFO] ... [[vfat price:9.405]] [2016-07-27T10:53:19.549+ 0200] [玻璃鱼4.1] [信息] ... [[净价:49.5]] [2016-07-27T10:53:19.554 + 0200] [玻璃鱼4.1] [信息] ... [[总价: 58.905]] 无论如何将尝试使用BigDecimal作为更强大的计算Ravi肯定有一个有效的点。 – Tom

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>