さまざまな例で、int/longの代わりにdecimalが使用されているのを見てきました。理由を理解しようとしているだけです
これはおそらく、.NET decimal
が原因です。 およびOracleNUMBER
long
よりも少し良いマップ およびNUMBER
また、柔軟性も向上します。後の段階でスケールを追加する場合 Oracle列で、すでにdecimal
を使用している場合は、データ型を変更する必要はありません。 。
decimal
確かにint
よりも遅いです およびlong
後の2つはハードウェアでサポートされているためです。とは言うものの、違いを生むには、かなりの量のデータを処理する必要があります。私はまだlong
を使うべきだと思います それがあなたが扱っているものであるなら、あなたはまた、テーブルの列の定義がそれを表すようにするべきです。 NUMBER(18,0)
long
の場合 など。
decimal
の理由 マップが少し良くなるのは、long
64ビットでdecimal
は(種類の)128ビットです。
.NET
タイプ:10進数
おおよその範囲:±1.0×10 ^ −28〜±7.9×10 ^ 28
精度:有効数字28〜29桁タイプ:長い
範囲:–9,223,372,036,854,775,808から9,223,372,036,854,775,807
精度:18(ulongの場合は19)有効数字
オラクル
NUMBER
デフォルトは有効数字38桁で、スケールは0(整数)です。
タイプ:番号
範囲:+1 x 10 ^ -130〜9.99 ... 9 x 10 ^ 125
精度:有効数字38桁
Microsoftは問題と注意事項を認識しています
このデータ型はNUMBER(38)データ型のエイリアスであり、OracleDataReaderが整数値ではなくSystem.DecimalまたはOracleNumberを返すように設計されています。 .NETFrameworkデータ型を使用すると、オーバーフローが発生する可能性があります。
考えてみると、実際にはBigInteger
が必要です。 NUMBER
と同じ有効桁数を表すことができるようにする デフォルトはです。私は誰もそれをするのを見たことがありません、そして私はそれが非常にまれな必要性であると思います。また、BigInteger
NUMBER
以来、まだカットされません 正と負の無限大にすることができます。