2016-07-26 63 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>