2017-08-04 85 views
0

如何在保持精度的同時在FreeMarker中列表數據,並且not losing cents due to double of float reprensations如何在FreeMarker中匯率?

<#assign totalSalaries = 0> 

<#list employees as employee> 
    <#assign totalSalaries = totalSalaries + emplpoyee.salary> 
</#list> 

${totalSalaries?string.currency} 

就個人而言,我更喜歡使用的多頭,把一切都在美分,但我無法找到一個簡單的解決方案將其轉換成貨幣值。無論哪種方式,如果我使用longBigDecimal(將美分轉換爲BigDecimal很容易),我怎麼能保證由於雙打或浮動的精度錯誤打印出的總薪水不會損失任何分數?換句話說,FreeMarker如何決定哪種類型的變量總數被定義爲?

回答

2

FreeMarker使用ArithmeticEngine(配置設置)進行計算(以及作爲其中一部分所需的數值類型轉換)。該設置的默認值爲BigDecimalEngine,在對它們做任何事情之前將所有內容都轉換爲BigDecimal,並將結果保留爲BigDecimal。因此,至少在默認情況下,您不會丟失任何數字。

+0

你知道這是記錄在哪裏嗎?我查找了一會兒,找不到任何東西,所以很高興看到我錯過了它;) –

+0

如果您仔細閱讀API中的配置設置,可能會碰到它......當然,它需要更多的提及。我會仔細看看的。 – ddekany

+0

謝謝,我找到了。是的,如果這是所有可能的,我會建議添加這個網站的某個地方,而不僅僅是API。無論如何,再次感謝你,非常感謝。順便說一下,我發現FreeMarker是一個非常了不起的模板引擎!令人敬畏的工作! –