2021/04/2

SalesforceにおけるDecimalとは?特徴や使い方などをご紹介

SalesforceにおけるDecimalとは?特徴や使い方などをご紹介

SalesforceにおけるDecimalとは?

SalesforceにおけるDecimalとは、Salesforceを機能拡張する際に使われるApex言語において、小数点を含む任意の精度数の数値を扱うプリミティブデータ型です。 また、通貨項目にはDecimal型が自動的に割り当てられます。

Decimalの概要

SalesforceのApex言語には、小数点を含む数値を扱うプリミティブデータ型にDoubleとDecimalがあります。Doubleと比べDecimalは扱える小数部の範囲が広く、多くのメソッドや様々な数値の丸め方が用意されています。

丸めモード

「CEILING」「FLOOR」「DOWN」「UP」「HALF_DOWN」「HALF_EVEN」「HALF_UP」「UNNECESSARY」の8つのモードがあります。 ここではそれぞれの説明と、各モードで整数に丸めた場合の例を紹介します。

CEILING, FLOOR

正の無限大に丸めるのがCEILING、負の無限大に丸めるのがFLOORです。 例) 入力値:3.5, 2.1, -1.1, -6.5 CEILINGモードの結果:4, 3, -1, -6 FLOORモードの結果:3, 2, -2, -7

DOWN, UP

DOWNは0方向に丸め、UPは0から遠い方向に丸めます。 例) 入力値:3.5, 2.1, -1.1, -6.5 DOWNモードの結果:3, 2, -1, -6 UPモードの結果:4, 3, -2, -7

HALF_DOWN, HALF_EVEN, HALF_UP

最も近い近似値に丸められます。2つの近似値が同じ距離にある場合、HALF_DOWNは0に近い方向へ、HALF_EVENは偶数の近似値に、HALF_UPは0から遠い方向に丸められます。 例) 入力値:3.5, 2.1, -1.1, -6.5 HALF_DOWNモードの結果:3, 2, -1, -6 HALF_EVENモードの結果:4, 2, -1, -6 HALF_UPモードの結果:4, 2, -1, -7

UNNECESSARY

丸める必要がない場合は少数部分(スケールを指定した場合はそれより小さい桁の部分)を切り捨てた値を返し、丸める必要がある場合、例えば5.5などでこのモードが指定されると、MathExceptionが発生します。 例) 入力値:1.0, -1.0, 5.5 UNNECESSARYモードの結果:1, -1, MathException

Decimalのメソッド

プリミティブデータ型であるDecimalのメソッドには、他のデータ型に変換するものや指定したデータ型の値を含むdecimalを返すもの、丸められた近似値を返すものなどが用意されています。 それらについて紹介していきます。

abs()

decimalの絶対値を返します。 戻り値の型:Decimal
Decimal decimalNum = -3.05443;
System.assertEquals(3.05443, decimalNum.abs());

divide(divisor, scale)

decimalをdivisorで指定した除数で除算し、scaleで指定したスケール(小数点以下の桁数)を設定します。丸めモードを指定するdivide(divisor, scale, roundingMode)も、ここで説明します。 divisorの型:Decimal scaleの型:Integer roundingModeの型:System.RoundingMode 戻り値の型:Decimal
Decimal decimalNum = 17.2;
Decimal result1 = decimalNum.divide(1000, 3);
System.assertEquals(0.017, result1);

Decimal result2 = decimalNum.divide(1000, 3, System.RoundingMode.UP);
System.assertEquals(0.018, result2);

doubleValue(), intValue(), longValue()

decimalのdouble値、int値、long値をそれぞれ返します。
Decimal decimalNum = 210.123456789012345678;
Double doubleNum = decimalNum.doubleValue();
System.debug(doubleNum); // 210.12345678901235

Integer intNum = decimalNum.intValue();
System.debug(intNum); // 210

Long longNum = decimalNum.longValue();
System.debug(longNum); // 210

format()

コンテキストユーザのロケールを使用して、decimalのstring値を返します。ユーザが設定した地域に合った表示形式になります。
// 日本の場合
Decimal decimalNum = 1234.56789;
system.debug(decimalNum.format()); // 1,234.568

pow(exponent)

decimalを、指定されたexponentの値まで累乗した値を返します。exponentが0の場合、1を返します。 exponentの型:Integer exponentの値は0~32,767です。 戻り値の型:Decimal
Decimal decimalNum = 43.21;
Decimal powDecimalNum = decimalNum.pow(2);
System.debug(powDecimalNum); // 1867.1041

precision()

decimalの桁数の合計を返します。 戻り値:Integer
Decimal decimalNum = 123.456;
Integer intNum = decimalNum.precision();
System.assertEquals(6, intNum);

round()

decimalの小数部を丸めた近似値を返します。丸めモードを指定するround(roundingMode)も、ここで説明します。 パラメータが指定されない場合、数値はHALF_EVENモードで丸められます。 roundingModeの型:System.RoundingMode 戻り値の型:Long
Decimal dNum = 2.5;
Long lNum1 = dNum.round();
System.assertEquals(2, lNum1);

Long lNum2 = dNum.round(System.RoundingMode.UP);
System.assertEquals(3, lNum2);

scale()

小数部の桁数を返します。 戻り値の型:Integer
Decimal decimalNum = 0.123456789;
System.assertEquals(9, decimalNum.scale());

setScale(scale)

HALF_EVENモードを使用し、指定されたスケールへ丸められます。また、丸めモードを指定するsetScale(scale, roundingMode)についても、ここで説明します。 scaleの型:Integer scaleの値の範囲は、-33~33です。scaleが-2のときは、整数の2桁目が丸められます。 roundingModeの型:System.RoundingMode 戻り値の型:Decimal
Decimal decimalNum = 1201.59263487;
Decimal setScaledNum1 = decimalNum.setScale(3);
System.assertEquals(1201.593, setScaledNum1);

Decimal setScaledNum2 = decimalNum.setScale(3, System.RoundingMode.DOWN);
System.assertEquals(1201.592, setScaledNum2);

stripTrailingZeros()

末尾の0が削除されたdecimalを返します。 戻り値の型:Decimal
Decimal decimalNum = 1.0100;
System.assertEquals(1.01, decimalNum.stripTrailingZeros());

toPlainString()

科学的記数法を用いずに、decimalのstring値を返します。科学的記数法とは、「1.08×10^23」のような書き方のものです。
Decimal decimalNum = 123.456;
System.assertEquals('123.456', decimalNum.toPlainString());

valueOf(doubleToDecimal)

指定したdoubleの値を含むdecimalを返します。他にもvalueOf(longToDecimal)やvalueOf(stringToDecimal)があります。あわせてここで説明します。 doubleToDecimalの型:Double longToDecimalの型:Long stringToDecimalの型:String 戻り値:Decimal
Double doubleNum = 1.732;
System.assertEquals(1.732, Decimal.valueOf(doubleNum));

Long longNum = 12345;
System.assertEquals(12345, Decimal.valueOf(longNum));

String strNum = '123.456';
System.assertEquals(123.456, Decimal.valueOf(strNum));

Decimalを活用しよう!

本記事では、SalesforceにおけるDecimalについて紹介しました。 Decimalは小数部を持つ数値に対して多くのメソッドを持ち、様々な丸め方を用意しています。Salesforceの機能拡張時に、是非活用できるようにしておきましょう。]]>

ITエンジニアへのキャリアチェンジならキャリアチェンジアカデミー

この記事の監修者・著者

株式会社オープンアップITエンジニア
株式会社オープンアップITエンジニア
未経験からITエンジニアへのキャリアチェンジを支援するサイト「キャリアチェンジアカデミー」を運営。これまで4500人以上のITエンジニアを未経験から育成・排出してきました。
・AWS、salesforce、LPICの合計認定資格取得件数:2100以上(2023年6月時点)
・AWS Japan Certification Award 2020 ライジングスター of the Year 受賞

おすすめの動画

  • 【未経験からIT業界へ転職するなら】相談窓口とスキルの獲得はここで解決!IT転職が一気に有利に!【キャリアチェンジアカデミー】

  • 【費用一切不要】未経験からIT業界へ転職するならまずはここへ相談!【キャリアチェンジアカデミー】

  • 【何のエンジニアになれるのか?】未経験からITエンジニアを目指すとこんな道がある【キャリアチェンジアカデミー】