Loading
Salesforce から送信されるメールは、承認済ドメインからのみとなります続きを読む

カスタム数値項目が指数表示になるのはなぜですか?

公開日: Jun 24, 2025
説明
API を介して大きな値のカスタム数値項目をクエリすると、値が科学的記数法で返されることがあります。これは、SOAP API だけではなく、Rest API または SOQL を経由した場合も同様です。

たとえば、ユーザインターフェースで 1234567 という値がある場合、API を経由してクエリすると、1234567.0 と表示されます。しかしながら、ユーザインターフェースで 12345678 という値がある場合、API を経由してクエリすると、1.2345678E7 と表示されます。

カスタム数値項目が (1234567 のような) 7 桁までの値を保持する場合、API は通常の値 (1234567.0) を返します。しかし、カスタム数値項目が (12345678 のような) 8 ~ 14 桁である場合、API は指数の値 (1.2345678E7) を返します。

これは設計通りの挙動です。

カスタム数値項目は倍精度浮動小数点の数値としてデータベースに保存されます。XML 標準に記載されているように、大きな値は科学的記数法で保存されます。このため、Salesforce のクエリは単純な数値ではなく、指数の値を返します。
解決策
SOAP API 開発者ガイドを確認すると、33 ページに次のように記述されています。 
http://resources.docs.salesforce.com/200/8/ja-jp/sfdc/pdf/apex_api.pdf


倍精度浮動小数点の数値。このデータ型の項目には、CurrencyTypeの ConversionRate などの小数点以下の値 (小数点の右側の桁) を保存できます。API では、currency データ double 型および percent データ型などの非整数値には double 型の値が保存されます。double 値では次のような条件を適用する場合があります。
  • scale: 小数点の右側の最大桁数。
  • precision: 小数点の左および右の両方を含めた桁数の合計。

小数点の左方の桁数の最大値は、precision - scale となります。Salesforce アプリケーションでは、精度の定義は異なり、小数点の左側の最大桁数となります。

W3C XML Schema Part 2: Datatypes Second Edition に記載されているとおり、相応に大きな数値の場合は、値を科学的記数法で保存できます。
http://www.w3.org/TR/xmlschema-2/#double - XML Standards, Primitive Datatypes, Double-


3.2.5.1 字句表現

倍精度浮動小数点の数値は、任意の文字 “E” または “e” に続いて指数が続く、仮数からなる字句表現を有します。指数は整数でなければいけません。仮数は  10 進数でなければいけません。指数および仮数の表現は、整数および小数の語彙規則に従う必要があります。”E” または “e” およびそれに続く指数を省略すると、指数の値は 0 であると仮定されます。正と負の無限大と非数の特殊な値は、それぞれ字句表現 INF、-INF、NaN を有します。ゼロの字句表現は正または負の符号をとることがあります。たとえば、-1E4、1267.43233E12、12.78e-2、12、-0、0 および INF は、すべて倍精度浮動小数点の正当なリテラルです。

この挙動の変更を希望する場合は、この実装を変更するための既存の Salesforce アイデアがあります。
https://success.salesforce.com/ideaView?id=08730000000kyqJAAQ

このアイデアに投票することで、現在の挙動を変更し、XML 基準に従わないようにすることに役立ちます。しかし、ユーザインターフェースに表示される値を反映した API の戻り値をお客様の期待に添うようにすることができます。
ナレッジ記事番号

000385889

 
読み込み中
Salesforce Help | Article