投稿者:Tetsuo Ajima | 投稿日:2011年10月04日(火) 11:23

apex:outputText

上記ページに、Visualforce上で数値の書式を指定する、下記のサンプルコードが記載されています。

<apex:outputText value="{0, number, 000,000.00}">
       <apex:param value="{!Account.AnnualRevenue}" />
 </apex:outputText>
</apex:page>


この記述方法では、端数の丸めに"Half-Even"という方式が採用されます。
"Half-Even"は米国の金融機関で広く用いられている方式で、中間の値を丸める際に切り上げではなく偶数側に寄せるという方法になります。
切り上げと切り捨てが平等に行われることから、計算結果がぶれないことが期待できるとされています。
この、"最近接偶数への丸め"という方式はIEEE 754、ISO-31 および JIS Z 8401規則Aで定義されています。

(例) 13.5 -> 14
(例) 14.5 -> 14
(例) 15.5 -> 16
(例) -13.5 -> -14
(例) -14.5 -> -14
(例) -15.5 -> -16

一方、Force.comプラットフォームの標準ページレイアウト、レポート、Visualforceのapex:outputFieldコンポーネントでは"Half-Up"という方式が採用されており、絶対値ベースで四捨五入を行うという方法になります。
この方式はJIS Z 8401の規則Bで定義されています。

(例) 13.5 -> 14
(例) 14.5 -> 15
(例) 15.5 -> 16
(例) -13.5 -> -14
(例) -14.5 -> -15
(例) -15.5 -> -16

ちなみに、日本国内においては、"四捨五入"として単純に中間値の切り上げとなる方法も広く用いられています。

(例) 13.5 -> 14
(例) 14.5 -> 15
(例) 15.5 -> 16
(例) -13.5 -> -13
(例) -14.5 -> -14
(例) -15.5 -> -15


最初に挙げた、Visualforceページ内でフォーマットパターンを指定する方式では常に"Half-Even"となってしまうため、これを"Half-Up"として他の箇所と揃えるには、Visualforceコントローラ内で値の丸め処理を行う必要があります。
Decimalクラスのround()メソッドやsetScale()メソッドは丸め方式を指定可能です。

(例) Integer int = Decimal.valueOf(-14.5).setScale(0, RoundingMode.HALF_UP).intValue();