1771936880
2026-02-24 09:15:00
Decimal-javaは変換するライブラリです java.math.BigDecimal IEEE-754r (IEEE-754-2008) 10 進バイト表現との間で相互に変換します。
Maven から 10 進数 Java を取得します。
このライブラリは以下に基づいてライセンスされています 私のライセンス、LICENSE.mdも参照してください。
API は安定しており、変更される予定はありません。
バージョン 2.0.0 以降には Java 17 以降が必要で、モジュール名でモジュール化されています。 org.firebirdsql.decimal。バージョン 1.0.2 には Java 7 以降が必要で、自動モジュール名を宣言します。 org.firebirdsql.decimal。
このライブラリは、次の間の変換を提供します。 java.math.BigDecimal および IEEE-754r 10 進形式。
特にサポートされているのは、次のバイト表現です。
- 10進数32
- 10進数64
- 10進数128
他の形式 (任意精度 10 進数) はサポートされる予定はありません。
このライブラリには、10 進数の数学演算は明示的に含まれていません。代わりに、次の使用を検討してください。 BigDecimal と MathContext.DECIMAL128、
MathContext.DECIMAL64、 または MathContext.DECIMAL32。
(最新のタグ付きリリースの) 完全な javadoc については、次を参照してください。 https://firebirdsql.github.io/decmal-java/javadoc/
4 バイトの Decimal32 をデコードして java.math.BigDecimal:
byte[] bytes = {(byte) 0xc7, (byte) 0xf4, (byte) 0xd2, (byte) 0xe7};
Decimal32 decimal32 = Decimal32.parseBytes(bytes);
BigDecimal bigDecimal = decimal32.toBigDecimal();
assertEquals(new BigDecimal("-1.234567E+96"), bigDecimal);
方法 toBigDecimal 投げる DecimalInconvertibleException 10 進数値が無限大または NaN 値の場合。実際の型と符号は例外から取得できます。
エンコード java.math.BigDecimal Decimal32 バイト配列へ:
BigDecimal bigDecimal = new BigDecimal("-7.50E-7");
Decimal32 decimal32 = Decimal32.valueOf(bigDecimal);
byte[] bytes = decimal32.toBytes();
assertArrayEquals(new byte[] {(byte) 0xa1, (byte) 0xc0, 0x03, (byte) 0xd0}, bytes);
これは次の場合に丸めを適用します。 bigDecimal 値は Decimal32 に適合しないため、オーバーフローは無限大に「丸め」られます。
無限大へのオーバーフローが望ましくない場合は、次を使用します。
BigDecimal bigDecimal = new BigDecimal("-7.50E-7");
Decimal32 decimal32 = Decimal32.valueOf(bigDecimal, OverflowHandling.THROW_EXCEPTION);
byte[] bytes = decimal32.toBytes();
assertArrayEquals(new byte[] {(byte) 0xa1, (byte) 0xc0, 0x03, (byte) 0xd0}, bytes);
変換は同じように機能します Decimal64 そして Decimal128。
の valueOf 以下のメソッドが存在します。
BigDecimalBigInteger- さらに、
valueOfExact(BigInteger)投げるもの
DecimalOverflowExceptionもしBigIntegerターゲットの小数型に合わせて丸める必要があります。
- さらに、
StringdoubleDecimal(親クラスDecimal32、Decimal64そしてDecimal128) 10 進数型間の変換を可能にする
の valueOf メソッドはターゲットの 10 進数タイプに合わせて値を丸め、指定されたオーバーフロー処理に応じて +/- 無限大を返すか、オーバーフロー時に例外をスローします。
型への変換は次のように行われます。
toBytes()toBigDecimal()– 投げますDecimalInconvertibleException値が無限大または NaN 値の場合toString()doubleValue()toDecimal(Class)そしてtoDecimal(Class, OverflowHandling)
を取得するには BigInteger、 使用 toBigDecimal().toBigInteger() ただし、大きな値(特に Decimal128) メモリを大量に使用する可能性があります。
このライブラリが存在する理由は次のとおりです。 火の鳥
バージョン 4.0 では SQL のサポートが追加されました。 DECFLOAT 型 (16 桁および 34 桁の精度) を使用して 10進数64 そして 10進数128 プロトコルに含まれており、このサポートを追加する必要がありました ジェイバード、Firebird JDBC ドライバー。
このための既存のライブラリを見つけることができなかったので (私の Google 機能が不足している可能性もありますが)、作成しました。他の人も同様のニーズを持っていると思うので、別のライブラリとしてリリースすることにしました。
このライブラリを一般的に使用できるようにしようとしましたが、これは確実です
存在理由 は、多くの設計および実装の決定に情報を提供してきました。プルリクエストや改善の提案は大歓迎です。
Jaybird はこのライブラリに直接依存しませんが、代わりに依存関係の数を減らすためのコピーが含まれています。 JDBC ドライバーの外部依存関係は、Maven/Gradle 以外の環境では厄介です。
SPDX ライセンス識別子: MIT
#FirebirdSQLdecmaljava #IEEE754 #進数をエンコードおよびデコードするための #Java #ライブラリ