Class NumberStringDecimal

Direct Known Subclasses:
SignedNumberStringDecimal

public class NumberStringDecimal extends ByteStreamDataSupport<BigDecimal>
符号なし数値のデータタイプ。

入力時にはバイトデータを数値(BigDecimal)に変換し、 出力時にはオブジェクトをバイトデータに変換して返却する。

本データタイプは符号なし数値の入出力データを扱うことを前提として設計されている。
入出力データとして符号付き数値を扱う場合は、SignedNumberStringDecimalを使用すること。

本データタイプは符号なし数値の入出力データを扱うことを前提として設計されている。
よって符号('+'または'-')が存在する入力データや、負数の出力データを扱うことはできない。

入力時にはトリム処理を、出力時にはパディング処理を行う。
パディング/トリム文字として、デフォルトでは"0"を使用するが、個別にパディング/トリム文字を使用することもできる。
(※パディング/トリム文字として指定できるのは1バイトの文字のみである。また、パディング/トリム文字として1~9の文字を使用することはできない)

データタイプの引数として設定可能なパラメータ

データタイプの第1引数にはバイト長を指定する。必須項目である。

データタイプの第2引数には小数点位置を指定する。ここで指定された小数点位置に従い、データの読み書きを行う。
ただし、入力データに小数点が含まれている場合(例:123.45)は、ここで指定した小数点位置は無視され、入力データ内の小数点をもとにデータの読み込みが行われる。

データタイプの引数の一覧を以下に示す。

引数 パラメータ名 パラメータの型 必須/任意 デフォルト値
第1引数 バイト長 Integer 必須 -
第2引数 小数点位置 Integer 任意 0

セッターを使用して設定可能なパラメータ

小数点の要否は#setRequiredDecimalPoint(boolean)によって指定できる。
trueを設定した場合、出力データに小数点が付与される。

セッタを使用して設定可能なパラメータの一覧を以下に示す。これらのパラメータはディレクティブを使用して設定することを想定している。

パラメータ名 パラメータの型 必須/任意 デフォルト値
小数点の要否 boolean 任意 true

設定例

入力データを読み込む場合の設定例を以下に示す。

入力データ バイト長 小数点位置 小数点の要否 パディング/トリム文字 入力データ変換後の値(BigDecimal)
0000012345 10 0 必要 0 12345
0000123.45 10 0 必要 0 123.45
0000012345 10 0 必要 0 12345
(半角スペース5個)12345 10 0 必要 半角スペース 12345
0000012345 10 2 必要 0 123.45

出力データを書き込む場合の設定例を以下に示す。

出力データ 出力データの型 バイト長 小数点位置 小数点の要否 パディング/トリム文字 出力データ変換後の値(byte[])
12345 String 10 0 必要 0 0000012345
123.45 String 10 0 必要 0 0000012345
12345 String 10 0 必要 半角スペース (半角スペース5個)12345
12345 BigDecimal 10 0 必要 0 0000012345
123.45 BigDecimal 10 2 必要 0 0000123.45
123.45 BigDecimal 10 3 必要 0 000123.450
123.45 BigDecimal 10 3 不要 0 0000123450
12345 BigDecimal 10 3 必要 0 012345.000
123000 BigDecimal 10 -3 不要 0 0000000123
123000 BigDecimal 10 -4 必要 0 00000012.3

  • Field Details

    • PADDING_CHAR_LENGTH

      protected static final int PADDING_CHAR_LENGTH
      パディング/トリム文字のサイズ
      See Also:
  • Constructor Details

    • NumberStringDecimal

      public NumberStringDecimal()
  • Method Details

    • init

      public DataType<BigDecimal,byte[]> init(FieldDefinition field, Object... args)
      初期化処理を行う。
      Overrides:
      init in class DataType<BigDecimal,byte[]>
      Parameters:
      field - フィールド定義
      args - データタイプのパラメータ
      Returns:
      初期化されたデータタイプ (通常はthisをリターンする)
    • getPaddingBytes

      protected byte[] getPaddingBytes(String paddingStr)
      パディング/トリム文字のバイト配列を返却する。
      Parameters:
      paddingStr - パディング/トリム文字
      Returns:
      パディング/トリム文字のバイト配列
    • initialize

      public DataType<BigDecimal,byte[]> initialize(Object... args)
      初期化処理を行う。
      Specified by:
      initialize in class DataType<BigDecimal,byte[]>
      Parameters:
      args - データタイプのパラメータ
      Returns:
      初期化されたデータタイプ (通常はthisをリターンする)
    • convertOnRead

      public BigDecimal convertOnRead(byte[] data)
      入力時に読み込んだデータを変換する。

      この実装では、入力時に、入力データをBigDecimalに変換して返却する。

      変換の際に指定された文字でトリムを行う。デフォルトのトリム文字として'0'を使用する。

      入力データの読み込みは、setRequiredDecimalPoint(boolean)で指定された小数点位置にしたがって行う。
      ただし、入力データに小数点が含まれている場合(例:123.45)は、入力データ内の小数点にしたがってデータの読み込みが行われる。

      Specified by:
      convertOnRead in class DataType<BigDecimal,byte[]>
      Parameters:
      data - フィールドの値データ
      Returns:
      変換後の値
    • convertOnRead

      protected BigDecimal convertOnRead(String strData)
      文字列に変換した入力データに対してトリム処理を行い、BigDecimalに変換する。

      入力データに符号('+'または'-')が存在する場合、例外をスローする。

      Parameters:
      strData - 入力データ
      Returns:
      数値
    • validateReadDataFormat

      protected void validateReadDataFormat(String data)
      入力データが妥当であることをチェックする。

      数値型で無い場合は、例外をスローする。

      Parameters:
      data - 入力データまたは出力データ
    • trim

      protected String trim(String str)
      トリム処理を行う。

      もし、パディング/トリム文字が'0'かつ、トリム対象のデータが0のみで構成される数値(0や000000)の場合、0を返却する。

      Parameters:
      str - トリム対象のデータ
      Returns:
      トリム後の文字列
    • toBigDecimal

      protected BigDecimal toBigDecimal(String trimmedStr)
      トリム後の文字列をBigDecimalに変換する。
      Parameters:
      trimmedStr - トリム後の文字列
      Returns:
      変換後のBigDecimal
    • convertOnWrite

      public byte[] convertOnWrite(Object data)
      出力時にフィールドデータの変換を行う。

      もし書き込みを行うデータが負数の場合、例外をスローする。

      Specified by:
      convertOnWrite in class DataType<BigDecimal,byte[]>
      Parameters:
      data - 書き込みを行うデータ
      Returns:
      変換後のバイトデータ
    • validateWriteDataFormat

      protected void validateWriteDataFormat(BigDecimal bigDecimal)
      書き込みを行うデータの形式をチェックする。

      データが負の符号を持つ場合、例外をスローする。

      符号を許容するサブクラスでは、本メソッドをオーバーライドし、無効化すること。

      Parameters:
      bigDecimal - 書き込みを行うデータ
    • formatWriteData

      protected String formatWriteData(BigDecimal bigDecimal)
      書き込みを行うデータをフォーマットする。

      小数点が必要な場合は小数点を付与した文字列を返却し、
      不要な場合は小数点を削除した文字列を返却する。

      Parameters:
      bigDecimal - BigDecimal変換後の書き込みデータ
      Returns:
      フォーマット後のデータ
    • isNegative

      protected boolean isNegative(BigDecimal bigDecimal)
      BigDecimalが負数かどうか。
      Parameters:
      bigDecimal - BigDecimal
      Returns:
      負数かどうか
    • convertToBytes

      protected byte[] convertToBytes(String strData)
      文字列をエンコーディングに従いバイトデータに変換する。
      Parameters:
      strData - 文字列
      Returns:
      文字列を変換したバイトデータ
    • checkBytesSize

      protected void checkBytesSize(byte[] bytes)
      出力データのサイズをチェックする。

      出力データのサイズがバイト長を超える場合、例外をスローする。

      Parameters:
      bytes - 出力データ
    • padding

      protected byte[] padding(byte[] bytes, int size)
      パディング処理を行う。
      Parameters:
      bytes - パディング前の値
      size - パディングを行うサイズ
      Returns:
      パディング後の値
    • getPaddingStr

      protected String getPaddingStr()
      パディング/トリム文字を返却する。 パディング/トリム文字が指定されていない場合、デフォルトで半角スペースを使用する。
      Returns:
      パディング/トリム文字
    • setRequiredDecimalPoint

      public NumberStringDecimal setRequiredDecimalPoint(boolean requiredDecimalPoint)
      小数点の要否を設定する。
      Parameters:
      requiredDecimalPoint - 小数点の要否(trueの場合、必要)
      Returns:
      このオブジェクト自体
    • getScale

      public int getScale()
      小数点の位置を取得する。
      Returns:
      小数点の位置