2017-08-04 9 views
0

精度を維持したままFreeMarkerのデータを集計するにはどうすればいいですか?not losing cents due to double of float reprensationsFreeMarkerでの通貨の合計は?

<#assign totalSalaries = 0> 

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

${totalSalaries?string.currency} 

は個人的に、私はlong型を使用し、セントのすべてを維持することを好むが、私は、通貨価値にそれを変換するために簡単な解決策を見つけることができませんでした。いずれにしても、私がlongまたはBigDecimalを使用している場合は、倍数や浮動小数点数の精度エラーのために、印字された総給与がセントを失うことはありません。言い換えれば、FreeMarkerはどのようなタイプの変数合計がどのように定義されているかを決定しますか?

答えて

2

FreeMarkerは、構成設定であるArithmeticEngineでの計算(およびその一部として必要な数値タイプの変換)を行います。その設定のデフォルトはBigDecimalEngineで、何もする前にすべてをBigDecimalに変換し、結果をBigDecimalとして保持します。したがって、デフォルトでは、少なくとも数字を失うことはありません。

+0

これが文書化されている場所をご存知ですか?私はしばらくの間探して何も見つけられなかったので、どこにいなくていいか分かりました) –

+0

APIの設定を調べると、それにぶつかることがあります。 。私はそれを徹底的に調べます。 – ddekany

+0

ありがとう、私はそれを見つけた。はい、可能であれば、APIだけでなくウェブサイトのどこかに追加することをお勧めします。いずれにしても、もう一度感謝します。非常に感謝しています。ところで、私はFreeMarkerが非常に素晴らしいテンプレートエンジンであることを見つけます!お見事!! –

関連する問題