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');