日本語版
最新ニュース
科学&テクノロジー

FirebirdSQL/decmal-java: IEEE-754 10 進数をエンコードおよびデコードするための Java ライブラリ

Decimal-javaは変換するライブラリです java.math.BigDecimal IEEE-754r (IEEE-754-2008) 10 進バイト表現との間で相互に変換します。 Maven から 10 進数 Java を取得します。 dependency> groupId>org.firebirdsqlgroupId> artifactId>decimal-javaartifactId> version>2.0.1version> dependency> このライブラリは以下に基づいてライセンスされています 私のライセンス、LICENSE.mdも参照してください。 API は安定しており、変更される予定はありません。 バージョン 2.0.0 以降には Java 17 以降が必要で、モジュール名でモジュール化されています。 org.firebirdsql.decimal。バージョン 1.0.2 には Java 7 以降が必要で、自動モジュール名を宣言します。 org.firebirdsql.decimal。 このライブラリは、次の間の変換を提供します。 java.math.BigDecimal および IEEE-754r…

FirebirdSQL/decmal-java: IEEE-754 10 進数をエンコードおよびデコードするための Java ライブラリ

1771936880
2026-02-24 09:15:00

Decimal-javaは変換するライブラリです java.math.BigDecimal IEEE-754r (IEEE-754-2008) 10 進バイト表現との間で相互に変換します。


MavenCentral

Maven から 10 進数 Java を取得します。

groupId> artifactId>decimal-javaartifactId> version>2.0.1version> dependency>

このライブラリは以下に基づいてライセンスされています 私のライセンス、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 進数の数学演算は明示的に含まれていません。代わりに、次の使用を検討してください。 BigDecimalMathContext.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 以下のメソッドが存在します。

  • BigDecimal
  • BigInteger
    • さらに、 valueOfExact(BigInteger) 投げるもの
      DecimalOverflowException もし BigInteger ターゲットの小数型に合わせて丸める必要があります。
  • String
  • double
  • Decimal (親クラス Decimal32Decimal64 そして 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 #ライブラリ

執筆者について: nipponese

Nipponese News編集部は、国内外のニュースを日本語で分かりやすくお届けします。