【Salesforce】Apexで数字を3桁区切りにする

【Salesforce】Apexで数字を3桁区切りにする

Salesforceでの開発の際、数字を文字列として出したいことはよくありますね。

文字列で表示する場合、3桁ごとにカンマ区切りにすることが多いと思います。

Visualforceで表示する場合は、簡単にできますね。

たとえば、こんな感じです。

<apex:outputText value="{0, number, ###,###,###}">
  <apex:param value="{!VALUE('1000000')}" />
</apex:outputText>

では、Apexで3桁区切りの数字にする場合はどうすれば良いのでしょうか。

結論を書くと、Decimal型のformat()を使うことで簡単に実装できるようです。

https://developer.salesforce.com/docs/atlas.ja-jp.apexcode.meta/apexcode/apex_methods_system_decimal.htm

開発者コンソールで試してみました。

Decimal val;

val = 1000;
system.debug(val + '⇒' + val.format());    // 1000⇒1,000

val = 1000.010;
system.debug(val + '⇒' + val.format());    // 1000.010⇒1,000.01

val = val.setScale(3);
system.debug(val + '⇒' + val.format());    // 1000.010⇒1,000.01

system.debug(String.valueOf(val));          // 1000.010

小数点以下も表示されるようですが、桁数は設定できないようです。

String.valueOfを使用すると小数点以下の桁数はDecimalに設定した桁数が表示されるようです。

3桁区切りのカンマと小数点以下の桁数をどちらも指定する場合は組み合わせるしかないのでしょうか。

Decimal val;
String str;

val = 1000.10;
val = val.setScale(2);

str = Decimal.valueOf(val.intValue()).format();
str += String.valueOf(val - val.intValue()).substring(1);

system.debug(str);  // 1,000.10

うーん、ちょっと美しくないですね。

探せばちょうどいいメソッドがありそうな気がします。

No comments.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です