Apexで割り算をしたら整数になった

タイトル通り、apex上で割り算をしたら整数になってしまったんですね。
単純に型付け言語による仕様だったのですが、ちょっとハマったのでメモ。

最初、記述したのが以下のコード

Decimal a = 1 / 2;
System.debug(a);  //0

これだと、0が出力されます。
Decimalは小数まで表示できる型なのになんで???
と思ったんですが、計算している、1とか2が、Integer型、ってことなんですね。
なので、これをDecimal型にしてやると計算できます。

Decimal a = Decimal.valueOf(1) / Decimal.valueOf(2);
System.debug(a);  //0.5

しかし数字を書きたいだけなのにいちいちキャストするのはめんどう。
なので、以下でも大丈夫。

Decimal a = 1.0 / 2.0;
System.debug(a);  //0.5

小数点をつけるとDecimal型になるようです。

ちなみにやりたかったことは、Datetime型の現在時間を日本時間(GMT+9)で表示することです。

Datetime.now() + (9.0/24.0)

Datetime型の足し算は1日単位で行われるため、24で割ると時間になります。
しかし、小数点にしないと0になってしまい計算できませんでした。
formatをつかってフォーマットしてしまうと文字列になってしまうため、足し算で対応しています。

formatを使った場合

Datetime.now().format('yyyy-MM-dd hh:mm', 'JST');

Salesforce Apex 日付 時間 – おでかけしましょ

   このエントリーをはてなブックマークに追加