Decimal (クラス)
public final serializable Decimal
パッケージ: CURL.LANGUAGE.MATH

10進浮動小数点を表すクラス。

説明

Decimal インスタンスは、 negative? プロパティでエンコードされた符号部と scale プロパティと共に96ビットの仮数部を使用して浮動小数点数を表す不変のオブジェクトです。 Decimal オブジェクトの値は、 sign * mantissa * 10 scale で表します。 sign は、 negative? が false なら 1 、trueなら –1 になります。 scale の値は、0~28の範囲で持つことができます。
Decimal クラスには intint64uint64 、または、 double オブジェクトから簡単に構築するためのさまざまな暗黙ファクトリが用意されています。addmultiply など標準的な算術演算は Decimal オブジェクトの演算を実行するために存在します。 to-intto-int64to-uint64to-double のメソッドは、さらなる処理のために Decimal オブジェクトを他の Curl の型に変換するために提供します。

コンストラクタ
from-double:double の値から Decimal オブジェクトを作成します。
ファクトリ public {Decimal.from-double d:double}:Decimal
from-int:int の値から Decimal オブジェクトを作成します。
コンストラクタ public implicit {Decimal.from-int i:int}
from-int64:int64 の値から Decimal オブジェクトを作成します。
コンストラクタ public implicit {Decimal.from-int64 i:int64}
from-uint64:uint64 の値から Decimal オブジェクトを作成します。
コンストラクタ public implicit {Decimal.from-uint64 i:uint64}
make-zero:値が 0 の Decimal オブジェクトを作成します。
コンストラクタ public implicit {Decimal.make-zero}
object-deserialize:
コンストラクタ public {Decimal.object-deserialize in:SerializeInputStream}
pow10:10のべき乗で表す Decimal オブジェクトを返します。
ファクトリ public {Decimal.pow10 exponent:int}:Decimal

プロパティ
m1:
フィールド public constant Decimal.m1:uint32 =0
m2:
フィールド public constant Decimal.m2:uint32 =0
m3:
フィールド public constant Decimal.m3:uint32 =0
negative?:もし Decimal の数値が 0 より小さければ、このフィールドは true です。
フィールド public constant Decimal.negative?:bool =false
scale:このフィールドは Decimal 値の小数点の右側に表示される小数点以下の桁数を示します。このフィールドの値は決してマイナスになることは無く、そして決して Decimal.max-scale より大きくなることはありません。
フィールド public constant Decimal.scale:int16 =0
signum:Decimal オブジェクトの符号を返します。
アクセサ public Decimal.signum:int
zero?:Decimal オブジェクトがゼロ (0) と等しいかどうかテストします。
アクセサ public Decimal.zero?:bool

クラス変数と定数
epsilon:2 つの連続した Decimal の値の間の最小の差は、10 -28に等しい。
public constant Decimal.epsilon:Decimal ={Decimal.from-components m1 = 1, scale = Decimal.max-scale }
max-scale:Decimal の値の scale プロパティに設定可能な最大値です。
public constant Decimal.max-scale:int16 =28
max-value:Decimal 値の最大値は、2 96 - 1 であり、十進表記では 79228162514264337593543950335 です。
public constant Decimal.max-value:Decimal ={Decimal.from-components m3 = max-uint32, m2 = max-uint32, m1 = max-uint32 }
min-value:Decimal 値の最小値は、-(2 96 - 1) であり、十進表記では -79228162514264337593543950335 です。
public constant Decimal.min-value:Decimal ={Decimal.from-components negative? = true, m3 = max-uint32, m2 = max-uint32, m1 = max-uint32 }

メソッド
abs:Decimal オブジェクトの絶対値を計算します。
public {Decimal.abs}:Decimal
add:2つの Decimal オブジェクトを加算します。
public {Decimal.add a:Decimal}:Decimal
canonicalize:この Decimal の数値の小数部分から連続している末尾の0のを取り除きます。
public {Decimal.canonicalize}:Decimal
ceiling:2 つの Decimal オブジェクトを除算し、その余りとともに整数値に数学的に切り上げた商を返します。
public {Decimal.ceiling
divisor:Decimal
}:(quotient:Decimal, remainder:Decimal)
compare:2つの Decimal オブジェクトを比較します。
public {Decimal.compare a:Decimal}:int
divide:2つの Decimal オブジェクトを除算します。
public {Decimal.divide divisor:Decimal}:Decimal
equal?:2 つの Decimal オブジェクトが等しいかどうかテストします。
public {Decimal.equal? a:Decimal}:bool
floor:2 つの Decimal オブジェクトを除算し、その余りとともに整数値に数学的切り捨てされた商を返します。
public {Decimal.floor
divisor:Decimal
}:(quotient:Decimal, remainder:Decimal)
max:2つの Decimal オブジェクトの最大値を計算します。
public {Decimal.max a:Decimal}:Decimal
min:2つの Decimal オブジェクトの最小値を計算します。
public {Decimal.min a:Decimal}:Decimal
multiply:2つの Decimal オブジェクトを乗算します。
public {Decimal.multiply a:Decimal}:Decimal
negate:Decimal オブジェクトの符号を反転します。
public {Decimal.negate}:Decimal
object-describe:
public {Decimal.object-describe}:void
object-serialize:
public {Decimal.object-serialize out:SerializeOutputStream}:void
round:2 つの Decimal オブジェクトを除算し、その余りとともに整数値に丸めた商を返します。
public {Decimal.round
divisor:Decimal
}:(quotient:Decimal, remainder:Decimal)
round-to-scale:指定された小数点の右側の桁数に最も近い値を返します。
public {Decimal.round-to-scale
scale:int,
round-to-even?:bool = true
}:Decimal
subtract:2 つの Decimal オブジェクトを減算します。
public {Decimal.subtract a:Decimal}:Decimal
to-double:self の値を double に変換して返します。
public {Decimal.to-double}:double
to-int:self の値を int に変換して返します。
public {Decimal.to-int}:int
to-int64:self の値を int64 に変換して返します。
public {Decimal.to-int64}:int64
to-uint64:self の値を uint64 に変換して返します。
public {Decimal.to-uint64}:uint64
truncate:2つの Decimal オブジェクトを除算し、その余りとともに整数値に切り捨てた商を返します。
public {Decimal.truncate
divisor:Decimal
}:(quotient:Decimal, remainder:Decimal)



コンストラクタ詳細
from-double (ファクトリ)
public {Decimal.from-double d:double}:Decimal

double の値から Decimal オブジェクトを作成します。

d: double の値が変換されます。

説明

d の数値に可能な限り近い Decimal オブジェクトを作成します。 もし dDecimal の範囲外の値であれば、 OverflowException をスローします。


from-int (コンストラクタ)
public implicit {Decimal.from-int i:int}

int の値から Decimal オブジェクトを作成します。

i: int の値が変換されます。

説明

i と同じ値の Decimal オブジェクトを作成します。この Decimal オブジェクトの scale のプロパティは 0 です。


from-int64 (コンストラクタ)
public implicit {Decimal.from-int64 i:int64}

int64 の値から Decimal オブジェクトを作成します。

i: int64 の値が変換されます。

説明

i と同じ値の Decimal オブジェクトを作成します。この Decimal オブジェクトの scale のプロパティは 0 です。


from-uint64 (コンストラクタ)
public implicit {Decimal.from-uint64 i:uint64}

uint64 の値から Decimal オブジェクトを作成します。

i: uint64 の値が変換されます。

説明

i と同じ値の Decimal オブジェクトを作成します。この Decimal オブジェクトの scale のプロパティは 0 です。


make-zero (コンストラクタ)
public implicit {Decimal.make-zero}

値が 0 の Decimal オブジェクトを作成します。

注意事項

let v:Decimal のように初期値設定がない Decimal 変数宣言が正当であるように、このコンストラクタは定義されて、 0 に初期化される変数になります。


object-deserialize (コンストラクタ)
public {Decimal.object-deserialize in:SerializeInputStream}
""


pow10 (ファクトリ)
public {Decimal.pow10 exponent:int}:Decimal

10のべき乗で表す Decimal オブジェクトを返します。

i: 10 のぺき乗の指数です。 i の値の範囲は、-28 <= i <= 28 です。

説明

その数値が 10 i に等しい Decimal オブジェクトを作成します。 もし i >= 0 であるなら、リターン値の scale のプロパティは 0 です。もし i < 0 なら、リターン値の scale プロパティは - i になり、そして戻ってリターン値の仮数は 1 になります。
このファクトリーは、 i の値にかかわらず、すばやく結果を返すことができるようにルックアップテーブルを使用することで実装されます。



プロパティ詳細
m1 (フィールド)
public constant Decimal.m1:uint32 =0
この項目はサポートされていません。内部使用限定となっています。


m2 (フィールド)
public constant Decimal.m2:uint32 =0
この項目はサポートされていません。内部使用限定となっています。


m3 (フィールド)
public constant Decimal.m3:uint32 =0
この項目はサポートされていません。内部使用限定となっています。


negative? (フィールド)
public constant Decimal.negative?:bool =false

もし Decimal の数値が 0 より小さければ、このフィールドは true です。



scale (フィールド)
public constant Decimal.scale:int16 =0

このフィールドは Decimal 値の小数点の右側に表示される小数点以下の桁数を示します。このフィールドの値は決してマイナスになることは無く、そして決して Decimal.max-scale より大きくなることはありません。



signum (アクセサ)
アクセサ public Decimal.signum:int

Decimal オブジェクトの符号を返します。

戻り値

もし self が正の数を表すなら、 1 を返します。もし self がゼロを表すなら、 0 を返します。もし self が負の数を表すなら、 –1 を返します。


zero? (アクセサ)
アクセサ public Decimal.zero?:bool

Decimal オブジェクトがゼロ (0) と等しいかどうかテストします。

戻り値

self が 0 ならtrue、違うならfalseです。

注意事項

このゲッターは数値が 0 に等しいか判定するために Decimal.equal? メソッドをコールするより効率的です。



クラス変数と定数の詳細
epsilon (クラス定数)
public constant Decimal.epsilon:Decimal ={Decimal.from-components m1 = 1, scale = Decimal.max-scale }

2 つの連続した Decimal の値の間の最小の差は、10 -28に等しい。



max-scale (クラス定数)
public constant Decimal.max-scale:int16 =28

Decimal の値の scale プロパティに設定可能な最大値です。



max-value (クラス定数)
public constant Decimal.max-value:Decimal ={Decimal.from-components m3 = max-uint32, m2 = max-uint32, m1 = max-uint32 }

Decimal 値の最大値は、2 96 - 1 であり、十進表記では 79228162514264337593543950335 です。



min-value (クラス定数)
public constant Decimal.min-value:Decimal ={Decimal.from-components negative? = true, m3 = max-uint32, m2 = max-uint32, m1 = max-uint32 }

Decimal 値の最小値は、-(2 96 - 1) であり、十進表記では -79228162514264337593543950335 です。





メソッド詳細
abs (メソッド)
public {Decimal.abs}:Decimal

Decimal オブジェクトの絶対値を計算します。

戻り値

self の 絶対値を Decimal オブジェクトで返します。結果は self と同じ scale プロパティを待ちます。


add (メソッド)
public {Decimal.add a:Decimal}:Decimal

2つの Decimal オブジェクトを加算します。

a: self に加算される Decimal オブジェクトです。

戻り値

selfa の和を Decimal オブジェクトで返します。

説明

結果の scale プロパティは、丸める必要がない限り、 2 つのオペランドの scale プロパティの大きい方と同じになります。もし結果がこの scale の値から Decimal の数値として表現することができない場合、 scale の値は結果として表現できるように最大値に下げられます。もし結果の有効桁の喪失があるなら、 銀行家の丸めが適用されるでしょう。
もし丸めた結果の絶対値が Decimal.max-value より大きいなら、 結果は Decimal オブジェクトで表示することができません。そして OverflowException がスローされます。


canonicalize (メソッド)
public {Decimal.canonicalize}:Decimal

この Decimal の数値の小数部分から連続している末尾の0のを取り除きます。

戻り値

self と同じ値ですが、少数桁の右端の 0 を持っていない Decimal 値です。

プログラミング注意事項

このメソッドは計算により末尾の 0 が膨大に生成される可能性があり、それが計算を継続する前に仮数サイズを減らすように求められる場合に使用してください。
数が実際に排除するべき末尾の 0 を持っていないときは、このメソッドは高負荷になりません、しかし排除されるそれぞれの少数位が仮数部を 10 で割る round-to-scale 演算を必要とします。


ceiling (メソッド)
public {Decimal.ceiling
divisor:Decimal
}:(quotient:Decimal, remainder:Decimal)

2 つの Decimal オブジェクトを除算し、その余りとともに整数値に数学的に切り上げた商を返します。

divisor: self を割ることになる Decimal オブジェクトです。

戻り値

最初の戻り値は、 selfa の商を数学的に切り上げした Decimal オブジェクトです。 2 番目の戻り値は、余りです。もしその正確な値が Decimal オブジェクトとして表現できない場合、余りは丸められているかもしれません。

説明

返却される値は常に quotient * divisor + remainder = self の恒等式に従います。商の scale 属性は常に 0 です。
もし divisor がゼロであるなら、ArithmeticException がスローされます。もし商の絶対値が Decimal.max-value より大きいなら、 商は Decimal オブジェクトで表示することができません。そして OverflowException スローされます。


compare (メソッド)
public {Decimal.compare a:Decimal}:int

2つの Decimal オブジェクトを比較します。

a: self と比較する Decimal オブジェクトです。

戻り値

もし selfa より大きいなら、 1 が返されます。もし selfa と等しければ、 0 が返されます。もし selfa より小さいなら、 –1 が返されます。

プログラミング注意事項

a が 0 であれば、 signum ゲッターは、より効率的になるでしょう。もし比較が selfa が等しいかどうかであるなら、 equal? メソッドの使用がいっそう効率的です。


divide (メソッド)
public {Decimal.divide divisor:Decimal}:Decimal

2つの Decimal オブジェクトを除算します。

divisor: self を割ることになる Decimal オブジェクトです。

戻り値

selfa の商を Decimal オブジェクトで返します。

説明

返却される商は 2 つのオペランドの正確な数学的な商に限りなく近いものになります。もし正確な数学的な商が 2 つの表示することができる Decimal 値の正確な中間にあるなら、銀行家の丸め が結果を計算するために使用されます。
もし divisor がゼロであるなら、ArithmeticException がスローされます。もし丸めた結果の絶対値が Decimal.max-value より大きいなら、結果は Decimal オブジェクトで表示することができません。そして OverflowException スローされます。


equal? (メソッド)
public {Decimal.equal? a:Decimal}:bool

2 つの Decimal オブジェクトが等しいかどうかテストします。

a: self と比較する Decimal オブジェクトです。

戻り値

selfa が同じ値ならtrue、違うならfalseです。

注意事項

selfa の等価判定を行うのみの目的であれば、このメソッドは Decimal.compare よりも効率的です。もし a が 0 なら zero? ゲッターがさらに効率的です。


floor (メソッド)
public {Decimal.floor
divisor:Decimal
}:(quotient:Decimal, remainder:Decimal)

2 つの Decimal オブジェクトを除算し、その余りとともに整数値に数学的切り捨てされた商を返します。

divisor: self を割ることになる Decimal オブジェクトです。

戻り値

最初の戻り値は、 selfa の商を数学的に切り捨てした Decimal オブジェクトです。 2 番目の戻り値は、余りです。もしその正確な値が Decimal オブジェクトとして表現できない場合、余りは丸められているかもしれません。

説明

返却される値は常に quotient * divisor + remainder = self の恒等式に従います。商の scale 属性は常に 0 です。
もし divisor がゼロであるなら、ArithmeticException がスローされます。もし商の絶対値が Decimal.max-value より大きいなら、 商は Decimal オブジェクトで表示することができません。そして OverflowException スローされます。


max (メソッド)
public {Decimal.max a:Decimal}:Decimal

2つの Decimal オブジェクトの最大値を計算します。

a: self と比較する Decimal オブジェクトです。

戻り値

self または、 a の大きい方を返します。もし selfa が等しい場合、 self を返します。


min (メソッド)
public {Decimal.min a:Decimal}:Decimal

2つの Decimal オブジェクトの最小値を計算します。

a: self と比較する Decimal オブジェクトです。

戻り値

self または、 a の小さい方を返します。もし selfa が等しい場合、 self を返します。


multiply (メソッド)
public {Decimal.multiply a:Decimal}:Decimal

2つの Decimal オブジェクトを乗算します。

a: self と掛けることになる Decimal オブジェクトです。

戻り値

selfa の積を Decimal オブジェクトで返します。

説明

結果の scale のプロパティは、丸める必要がない限り、2 つのオペランドの scale プロパティの合計に等しいです。もし結果の scale の値から Decimal の数値として表現することができない場合、 scale の値は結果に表されることができるようにする最大値に下げられます。もし結果に有効桁の喪失があるなら、 銀行家の丸め が適用されます。もし結果として生じている scale プロパティが Decimal.max-scale より大きいなら、結果の scale プロパティが Decimal.max-scale と等しくなるように、 銀行家の丸め を用いて再び有効桁数の損失の処理を行います。
もし丸めた結果の絶対値が Decimal.max-value より大きいなら、結果は Decimal オブジェクトで表示することができません。そして OverflowException がスローされます。


negate (メソッド)
public {Decimal.negate}:Decimal

Decimal オブジェクトの符号を反転します。

戻り値

self の符号を反転させたDecimal オブジェクトを返します。結果は self と同じ scale プロパティを待ちます。


object-describe (メソッド)
public {Decimal.object-describe}:void
""


object-serialize (メソッド)
public {Decimal.object-serialize out:SerializeOutputStream}:void
""


round (メソッド)
public {Decimal.round
divisor:Decimal
}:(quotient:Decimal, remainder:Decimal)

2 つの Decimal オブジェクトを除算し、その余りとともに整数値に丸めた商を返します。

divisor: self を割ることになる Decimal オブジェクトです。

戻り値

最初の戻り値は、 selfa の商を整数に四捨五入した Decimal オブジェクトです。 2 番目の戻り値は、余りです。もしその正確な値が Decimal オブジェクトとして表現できない場合、余りは丸められているかもしれません。

説明

返却される値は常に quotient * divisor + remainder = self の恒等式に従います。商の scale 属性は常に 0 です。
もし divisor がゼロであるなら、ArithmeticException がスローされます。もし商の絶対値が Decimal.max-value より大きいなら、 商は Decimal オブジェクトで表示することができません。そして OverflowException スローされます。


round-to-scale (メソッド)
public {Decimal.round-to-scale
scale:int,
round-to-even?:bool = true
}:Decimal

指定された小数点の右側の桁数に最も近い値を返します。

scale: 返される結果の小数点以下の桁の最大数を指定します。これは、返される結果の scale プロパティの最大値です。
round-to-even?: もし self の値が指定された scale プロパティにおいて Decimal 値の中間にあるなら、 round-to-even? が trueの場合、銀行家の丸め が適用されます。さもなければ、ゼロから遠い方に丸めます。

戻り値

scale より大きくない scale プロパティで丸めた結果です。もし selfscale プロパティが scale より小さい場合、返却値は self と同じです。

注意事項

"round-to-scale" を使うことは、もし a が非常に大きく、そして a.scalescale よりすでに小さい場合、オーバフローを発生することを避けること以外、{a.round-to-scale scale} ( round-to-even? のデフォルト値trueを使用)の値は、 {a.round {Decimal.pow10 -scale}} * {Decimal.pow10 -scale} の式に等しいです。


subtract (メソッド)
public {Decimal.subtract a:Decimal}:Decimal

2 つの Decimal オブジェクトを減算します。

a: self と引くことになる Decimal オブジェクトです。

戻り値

selfa の差分を Decimal オブジェクトで返します。

説明

結果の scale プロパティが決定される方法と、オーバーフローが処理される方法については、 Decimal.add を参照してください。


to-double (メソッド)
public {Decimal.to-double}:double

self の値を double に変換して返します。

戻り値

self の値に最も近い double の値です。


to-int (メソッド)
public {Decimal.to-int}:int

self の値を int に変換して返します。

戻り値

self の値に最も近い int の値です。もし self の値が整数の真中にあるなら、 銀行家の丸め が使われます。もし self の値の整数の近似値が int の値が表示することができる範囲外の場合、 OverflowException がスローされます。


to-int64 (メソッド)
public {Decimal.to-int64}:int64

self の値を int64 に変換して返します。

戻り値

self の値に最も近い int64 の値です。もし self の値が整数の真中にあるなら、 銀行家の丸め が使われます。もし self の値の整数の近似値が int64 の値が表示することができる範囲外の場合、 OverflowException がスローされます。


to-uint64 (メソッド)
public {Decimal.to-uint64}:uint64

self の値を uint64 に変換して返します。

戻り値

self の値に最も近い uint64 の値です。もし self の値が整数の真中にあるなら、 銀行家の丸め が使われます。もし self の値の整数の近似値が uint64 の値が表示することができる範囲外の場合、 OverflowException がスローされます。


truncate (メソッド)
public {Decimal.truncate
divisor:Decimal
}:(quotient:Decimal, remainder:Decimal)

2つの Decimal オブジェクトを除算し、その余りとともに整数値に切り捨てた商を返します。

divisor: self を割ることになる Decimal オブジェクトです。

戻り値

最初の戻り値は、 selfa の整数の商を Decimal オブジェクトです。 2 番目の戻り値は、余りです。もしその正確な値が Decimal オブジェクトとして表現できない場合、余りは切り捨てられているかもしれません。

説明

返却される値は常に quotient * divisor + remainder = self の恒等式に従います。さらに、剰余がゼロ以外であるときはいつでも、その符号は常に self の符号と同じです。商の scale プロパティは常に0です。
もし divisor がゼロの場合、ArithmeticException がスローされます。もし商の絶対値が Decimal.max-value より大きいなら、 商は Decimal オブジェクトで表示することができません。そして OverflowException スローされます。