public class NumberStringDecimal extends ByteStreamDataSupport<java.math.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 |
Modifier and Type | Field and Description |
---|---|
protected static int |
PADDING_CHAR_LENGTH
パディング/トリム文字のサイズ
|
convertEmptyToNull
Constructor and Description |
---|
NumberStringDecimal() |
Modifier and Type | Method and Description |
---|---|
protected void |
checkBytesSize(byte[] bytes)
出力データのサイズをチェックする。
出力データのサイズがバイト長を超える場合、例外をスローする。
|
java.math.BigDecimal |
convertOnRead(byte[] data)
入力時に読み込んだデータを変換する。
|
protected java.math.BigDecimal |
convertOnRead(java.lang.String strData)
文字列に変換した入力データに対してトリム処理を行い、BigDecimalに変換する。
|
byte[] |
convertOnWrite(java.lang.Object data)
出力時にフィールドデータの変換を行う。
もし書き込みを行うデータが負数の場合、例外をスローする。
|
protected byte[] |
convertToBytes(java.lang.String strData)
文字列をエンコーディングに従いバイトデータに変換する。
|
protected java.lang.String |
formatWriteData(java.math.BigDecimal bigDecimal)
書き込みを行うデータをフォーマットする。
|
protected byte[] |
getPaddingBytes(java.lang.String paddingStr)
パディング/トリム文字のバイト配列を返却する。
|
protected java.lang.String |
getPaddingStr()
パディング/トリム文字を返却する。
パディング/トリム文字が指定されていない場合、デフォルトで半角スペースを使用する。
|
int |
getScale()
小数点の位置を取得する。
|
DataType<java.math.BigDecimal,byte[]> |
init(FieldDefinition field,
java.lang.Object... args)
初期化処理を行う。
|
DataType<java.math.BigDecimal,byte[]> |
initialize(java.lang.Object... args)
初期化処理を行う。
|
protected boolean |
isNegative(java.math.BigDecimal bigDecimal)
BigDecimalが負数かどうか。
|
protected byte[] |
padding(byte[] bytes,
int size)
パディング処理を行う。
|
NumberStringDecimal |
setRequiredDecimalPoint(boolean requiredDecimalPoint)
小数点の要否を設定する。
|
protected java.math.BigDecimal |
toBigDecimal(java.lang.String trimmedStr)
トリム後の文字列をBigDecimalに変換する。
|
protected java.lang.String |
trim(java.lang.String str)
トリム処理を行う。
もし、パディング/トリム文字が'0'かつ、トリム対象のデータが0のみで構成される数値(0や000000)の場合、0を返却する。
|
protected void |
validateReadDataFormat(java.lang.String data)
入力データが妥当であることをチェックする。
数値型で無い場合は、例外をスローする。
|
protected void |
validateWriteDataFormat(java.math.BigDecimal bigDecimal)
書き込みを行うデータの形式をチェックする。
|
getSize, setSize
getField, removePadding, setConvertEmptyToNull
protected static final int PADDING_CHAR_LENGTH
public DataType<java.math.BigDecimal,byte[]> init(FieldDefinition field, java.lang.Object... args)
protected byte[] getPaddingBytes(java.lang.String paddingStr)
paddingStr
- パディング/トリム文字public DataType<java.math.BigDecimal,byte[]> initialize(java.lang.Object... args)
initialize
in class DataType<java.math.BigDecimal,byte[]>
args
- データタイプのパラメータpublic java.math.BigDecimal convertOnRead(byte[] data)
この実装では、入力時に、入力データをBigDecimalに変換して返却する。
変換の際に指定された文字でトリムを行う。デフォルトのトリム文字として'0'を使用する。
入力データの読み込みは、setRequiredDecimalPoint(boolean)
で指定された小数点位置にしたがって行う。
ただし、入力データに小数点が含まれている場合(例:123.45)は、入力データ内の小数点にしたがってデータの読み込みが行われる。
convertOnRead
in class DataType<java.math.BigDecimal,byte[]>
data
- フィールドの値データprotected java.math.BigDecimal convertOnRead(java.lang.String strData)
入力データに符号('+'または'-')が存在する場合、例外をスローする。
strData
- 入力データprotected void validateReadDataFormat(java.lang.String data)
data
- 入力データまたは出力データprotected java.lang.String trim(java.lang.String str)
str
- トリム対象のデータprotected java.math.BigDecimal toBigDecimal(java.lang.String trimmedStr)
trimmedStr
- トリム後の文字列public byte[] convertOnWrite(java.lang.Object data)
convertOnWrite
in class DataType<java.math.BigDecimal,byte[]>
data
- 書き込みを行うデータprotected void validateWriteDataFormat(java.math.BigDecimal bigDecimal)
データが負の符号を持つ場合、例外をスローする。
符号を許容するサブクラスでは、本メソッドをオーバーライドし、無効化すること。
bigDecimal
- 書き込みを行うデータprotected java.lang.String formatWriteData(java.math.BigDecimal bigDecimal)
小数点が必要な場合は小数点を付与した文字列を返却し、
不要な場合は小数点を削除した文字列を返却する。
bigDecimal
- BigDecimal変換後の書き込みデータprotected boolean isNegative(java.math.BigDecimal bigDecimal)
bigDecimal
- BigDecimalprotected byte[] convertToBytes(java.lang.String strData)
strData
- 文字列protected void checkBytesSize(byte[] bytes)
bytes
- 出力データprotected byte[] padding(byte[] bytes, int size)
bytes
- パディング前の値size
- パディングを行うサイズprotected java.lang.String getPaddingStr()
public NumberStringDecimal setRequiredDecimalPoint(boolean requiredDecimalPoint)
requiredDecimalPoint
- 小数点の要否(trueの場合、必要)public int getScale()