ImBigDecimal
- ImBigDecimal
Constructor
変更が不可能な、任意精度の符号付き10 進数オブジェクト。
ImBigDecimal は、任意精度のスケールなしの整数値と、32 ビット整数のスケールで構成されます。
0 または正の場合、スケールは小数点以下の桁数です。負の場合、スケールなしの数値に、スケールの正負を逆にした値を指数とする10の累乗を乗算します。
詳細については、java の java.math.BigDecimal のAPIドキュメントを参照してください。
サンプルコード1 ImBigDecimal の使い方
サンプルコード2 初期化の誤差
サンプルコード3 divide(ImBigDecimal divisor) の実行結果
ImBigDecimal は、任意精度のスケールなしの整数値と、32 ビット整数のスケールで構成されます。
0 または正の場合、スケールは小数点以下の桁数です。負の場合、スケールなしの数値に、スケールの正負を逆にした値を指数とする10の累乗を乗算します。
詳細については、java の java.math.BigDecimal のAPIドキュメントを参照してください。
注意事項
ImBigDecimal の仕様は基本的には java の java.math.BigDecimal の仕様に従いますが、一部仕様が異なります。
- java.math.BigDecimal では文字列で初期化した場合と double 型や float 型を使用して初期化した場合では誤差が生じますが、 ImBigDecimal は誤差が生じません。 詳細は以下のサンプル2を参照してください。
- java.math.BigDecimal では divide(BigDecimal divisor) 実行時に正確な商を表現できない場合は ArithmeticException がスローされますが、ImBigDecimal では divide(ImBigDecimal divisor) 実行時に正確な商を表現できない場合でもエラーが発生しません。 詳細は以下のサンプル3を参照してください。
サンプルコード1 ImBigDecimal の使い方
<!-- ImBigDecimal の使用には下記スクリプト2ファイルを記載通りの順番に読み込んでください。 --> <script src="ui/libs/bigdecimal-js/BigDecimal-all-last.min.js"></script> <script src="ui/js/math/im_decimal.min.js"></script> : : <script type="text/javascript"> var value1 = new ImBigDecimal(1.23456); var value2 = new ImBigDecimal(1.23456, new ImMathContext(4, ImRoundingMode.UP)); var value3 = new ImBigDecimal("1.23456"); var value4 = new ImBigDecimal("1.23456", new ImMathContext(3, ImRoundingMode.HALF_UP)); var value5 = value1.add(value2); console.log(value1.toPlainString()); // 1.23456 console.log(value2.toPlainString()); // 1.235 console.log(value3.toPlainString()); // 1.23456 console.log(value4.toPlainString()); // 1.23 console.log(value5.toPlainString()); // 2.46956 </script>
サンプルコード2 初期化の誤差
- java.math.BigDecimal の場合
BigDecimal numVal = new BigDecimal(1234.5678); BigDecimal strVal = new BigDecimal("1234.5678"); System.out.println(numVal.toPlainString()); // 1234.567800000000033833202905952930450439453125 System.out.println(strVal.toPlainString()); // 1234.5678 System.out.println(numVal.equals(strVal)); // false
-
ImBigDecimal の場合
var numVal = new ImBigDecimal(1234.5678); var strVal = new ImBigDecimal("1234.5678"); console.log(numVal.toPlainString()); // 1234.5678 console.log(strVal.toPlainString()); // 1234.5678 console.log(numVal.equals(strVal)); // true
サンプルコード3 divide(ImBigDecimal divisor) の実行結果
- java.math.BigDecimal の場合
BigDecimal left = new BigDecimal("100"); BigDecimal right = new BigDecimal("3"); BigDecimal result = left.divide(right); // ArithmeticException がスローされます System.out.println(result.toPlainString());
-
ImBigDecimal の場合
var left = new ImBigDecimal("100"); var right = new ImBigDecimal("3"); var result = left.divide(right); // エラーが発生しません console.log(result.toPlainString()); // 33.33
Parameters
- val : Number/String
- ImBigDecimal に変換する Number 値あるいは ImBigDecimal の文字列表現。
- mc : ImMathContext
- Optional
- 使用するコンテキスト。
Instance members
Instance Methods
ImMathContext の指定がない場合は値がこの ImBigDecimal の絶対値である ImBigDecimal を返します。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値がこの ImBigDecimal の絶対値である ImBigDecimal を返します。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値がこの ImBigDecimal の絶対値である ImBigDecimal を返します。
Parameters
- mc : ImMathContext
- Optional
- 使用するコンテキスト。
- ImBigDecimal
- ImMathContext の指定がない場合は abs(this)。
ImMathContext の指定がある場合は必要に応じて丸められた abs(this)。
ImMathContext の指定がない場合は値が (this + augend) でスケールが max(this.scale(), augend.scale()) である ImBigDecimal を返します。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値が (this + augend) である ImBigDecimal を返します。
どちらかの数値が 0 で精度設定が 0 以外である場合、必要に応じて丸められたほかの数値が結果として使用されます。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値が (this + augend) である ImBigDecimal を返します。
どちらかの数値が 0 で精度設定が 0 以外である場合、必要に応じて丸められたほかの数値が結果として使用されます。
Parameters
- augend : ImBigDecimal
- この ImBigDecimal で加算する値。
- mc : ImMathContext
- Optional
- 使用するコンテキスト。
- ImBigDecimal
- ImMathContext の指定がない場合は this + augend。
ImMathContext の指定がある場合は必要に応じて丸められた this + augend。
この ImBigDecimal を指定された ImBigDecimal と比較します。
このメソッドでは、値は等しいがスケールが異なる2つの ImBigDecimal オブジェクト(たとえば、2.0と2.00)が等しいと見なされます。
このメソッドでは、値は等しいがスケールが異なる2つの ImBigDecimal オブジェクト(たとえば、2.0と2.00)が等しいと見なされます。
Parameters
- val : ImBigDecimal
- この ImBigDecimal と比較する ImBigDecimal。
- Number
- この ImBigDecimal の数値が val より小さい場合は -1、等しい場合は 0、大きい場合は 1。
divide
( ImBigDecimal divisor, [ImMathContext/Number/ImRoundingMode mc|scale|roundingMode], [ImRoundingMode roundingMode] )
: ImBigDecimal
ImBigDecimal
除算結果の ImBigDecimal を返します。引数のパターンには下記4通りあります。
- divide(ImBigDecimal divisor) : 値が (this / divisor) で優先スケールが (this.scale() - divisor.scale()) である ImBigDecimal を返します。計算結果が循環小数となる場合、精度が (this.precision() + divisor.precision()) である ImBigDecimal を返します。
- divide(ImBigDecimal divisor, ImMathContext mc) : コンテキスト設定に従った丸めを使用して、値が (this / divisor) である ImBigDecimal を返します。
- divide(ImBigDecimal divisor, Number scale, ImRoundingMode roundingMode) : 値が (this / divisor) で、スケールが指定されたものである ImBigDecimal を返します。丸めを行い、指定したスケールで結果を生成する必要がある場合は、指定した丸めモードが適用されます。
- divide(ImBigDecimal divisor, ImRoundingMode roundingMode) : 値が (this / divisor) でスケールが this.scale() である ImBigDecimal を返します。丸めを行い、指定したスケールで結果を生成する必要がある場合は、指定した丸めモードが適用されます。
Parameters
- divisor : ImBigDecimal
- この ImBigDecimal を除算する値。
- mc|scale|roundingMode : ImMathContext/Number/ImRoundingMode
- Optional
- divide(ImBigDecimal divisor, ImMathContext mc) : 使用するコンテキスト。
- divide(ImBigDecimal divisor, Number scale, ImRoundingMode roundingMode) : 返される ImBigDecimal の商のスケール(整数値)。
- divide(ImBigDecimal divisor, ImRoundingMode roundingMode) : 適用する丸めモード。
- roundingMode : ImRoundingMode
- Optional
- divide(ImBigDecimal divisor, Number scale, ImRoundingMode roundingMode) : 適用する丸めモード。
- ImBigDecimal
- divide(ImBigDecimal divisor) : this / divisor。
- divide(ImBigDecimal divisor, ImMathContext mc) : 必要に応じて丸められた this / divisor。
- divide(ImBigDecimal divisor, Number scale, ImRoundingMode roundingMode) : this / divisor。
- divide(ImBigDecimal divisor, ImRoundingMode roundingMode) : this / divisor。
ImMathContext の指定がない場合は divideToIntegralValue の結果とそれに続く2つのオペランドの remainder の結果を含む、2要素の ImBigDecimal配列 を返します。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して計算された divideToIntegralValue の結果と、 2つのオペランドの remainder の結果を含む、2要素の ImBigDecimal 配列を返します。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して計算された divideToIntegralValue の結果と、 2つのオペランドの remainder の結果を含む、2要素の ImBigDecimal 配列を返します。
Parameters
- divisor : ImBigDecimal
- この ImBigDecimal を除算する値、および計算された剰余。
- mc : ImMathContext
- Optional
- 使用するコンテキスト。
- Array
- 2要素の ImBigDecimal 配列。商 (divideToIntegralValue の結果) が最初の要素で、剰余が最後の要素。
ImMathContext の指定がない場合は値が丸められた商 (this / divisor) の整数部である ImBigDecimal を返します。 結果の優先スケールは (this.scale() - divisor.scale()) です。
ImMathContext の指定がある場合は値が (this / divisor) の整数部である ImBigDecimal を返します。 正確な商の整数部は丸めモードに依存しないため、丸めモードはこのメソッドにより返される値に影響を及ぼしません。
ImMathContext の指定がある場合は値が (this / divisor) の整数部である ImBigDecimal を返します。 正確な商の整数部は丸めモードに依存しないため、丸めモードはこのメソッドにより返される値に影響を及ぼしません。
Parameters
- divisor : ImBigDecimal
- この ImBigDecimal を除算する値。
- mc : ImMathContext
- Optional
- 使用するコンテキスト。
- ImBigDecimal
- this / divisor の整数部。
この ImBigDecimal と指定された Object が同じかどうか比較します。
Parameters
- x : Object
- この ImBigDecimal と比較する Object。
- Boolean
- 指定された Object が ImBigDecimal で、その値とスケールがこの ImBigDecimal と等しい場合にだけ true。
この ImBigDecimal と val の最大値を返します。
Parameters
- val : ImBigDecimal
- 最大値の計算に使用する値。
- ImBigDecimal
- この ImBigDecimal と val のうちで大きい方の値を持つ ImBigDecimal。値が等しい場合は、this の値を持つ ImBigDecimal が返されます。
この ImBigDecimal と val の最小値を返します。
Parameters
- val : ImBigDecimal
- 最小値の計算に使用する値。
- ImBigDecimal
- この ImBigDecimal と val のうちで小さい方の値を持つ ImBigDecimal。値が等しい場合は、this の値を持つ ImBigDecimal が返されます。
小数点を n 桁左へ移動してこれに等しい ImBigDecimal を返します。
n が負でない場合は、スケールに n を単に加算します。 n が負の場合は、movePointRight(-n) に等しくなります。
この呼出しによって返される ImBigDecimal は、値 (this × 10-n) およびスケール max(this.scale() + n, 0) となります。
n が負でない場合は、スケールに n を単に加算します。 n が負の場合は、movePointRight(-n) に等しくなります。
この呼出しによって返される ImBigDecimal は、値 (this × 10-n) およびスケール max(this.scale() + n, 0) となります。
Parameters
- n : Number
- 小数点を左へ移動する桁数(整数値)。
- ImBigDecimal
- 小数点を n 桁左へ移動した、これに等しい ImBigDecimal。
小数点を n 桁右へ移動してこれに等しい ImBigDecimal を返します。
n が負でない場合は、スケールから n を単に減算します。n が負の場合は、movePointLeft(-n) に等しくなります。
この呼出しによって返される ImBigDecimal は、値 (this × 10n) およびスケール max(this.scale() - n, 0) となります。
n が負でない場合は、スケールから n を単に減算します。n が負の場合は、movePointLeft(-n) に等しくなります。
この呼出しによって返される ImBigDecimal は、値 (this × 10n) およびスケール max(this.scale() - n, 0) となります。
Parameters
- n : Number
- 小数点を右へ移動する桁数(整数値)。
- ImBigDecimal
- 小数点を n 桁右へ移動した、これに等しい ImBigDecimal。
ImMathContext の指定がない場合は値が (this × multiplicand) でスケールが (this.scale() + multiplicand.scale()) である ImBigDecimal を返します。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値が (this × multiplicand) である ImBigDecimal を返します。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値が (this × multiplicand) である ImBigDecimal を返します。
Parameters
- multiplicand : ImBigDecimal
- この ImBigDecimal で乗算する値。
- mc : ImMathContext
- Optional
- 使用するコンテキスト。
- ImBigDecimal
- ImMathContext の指定がない場合は this * multiplicand。
ImMathContext の指定がある場合は必要に応じて丸められた this * multiplicand。
ImMathContext の指定がない場合は値が (-this) で スケールが this.scale() である ImBigDecimal を返します。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値が (-this) である ImBigDecimal を返します。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値が (-this) である ImBigDecimal を返します。
Parameters
- mc : ImMathContext
- Optional
- 使用するコンテキスト。
- ImBigDecimal
- ImMathContext の指定がない場合は -this。
ImMathContext の指定がある場合は必要に応じて丸められた -this。
この ImBigDecimal を Number に変換します。
この変換により ImBigDecimal 値の精度に関する情報が失われる可能性があります。
この変換により ImBigDecimal 値の精度に関する情報が失われる可能性があります。
Returns
- Number
- Number に変換されたこの ImBigDecimal。
ImMathContext の指定がない場合は値が (thisn) である ImBigDecimal を返します。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値が (thisn) である ImBigDecimal を返します。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値が (thisn) である ImBigDecimal を返します。
Parameters
- n : Number
- この ImBigDecimal の累乗(整数値)。
- mc : ImMathContext
- Optional
- 使用するコンテキスト。
- ImBigDecimal
- ImMathContext の指定がない場合は thisn。
ImMathContext の指定がある場合は必要に応じて丸められた thisn。
この ImBigDecimal の精度を返します。
精度とは、スケールなしの値の桁数のことです。
精度とは、スケールなしの値の桁数のことです。
Returns
- Number
- この ImBigDecimal の精度(整数値)。
ImMathContext の指定がない場合は値が (this % divisor) である ImBigDecimal を返します。 剰余は、this.subtract(this.divideToIntegralValue(divisor).multiply(divisor)) で得られます。
これはモジュロ演算ではない(負の結果が可能)であることに留意してください。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値が (this % divisor) である ImBigDecimal を返します。
ImMathContext の設定は、剰余の計算に使用する暗黙的な除算に影響を及ぼします。定義の示すとおり、剰余の計算自体は正確です。そのため、剰余は mc.getPrecision() よりも多くの桁を含む可能性があります。
剰余は、this.subtract(this.divideToIntegralValue(divisor, mc).multiply(divisor)) で得られます。これはモジュロ演算ではない(負の結果が可能)であることに留意してください。
これはモジュロ演算ではない(負の結果が可能)であることに留意してください。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値が (this % divisor) である ImBigDecimal を返します。
ImMathContext の設定は、剰余の計算に使用する暗黙的な除算に影響を及ぼします。定義の示すとおり、剰余の計算自体は正確です。そのため、剰余は mc.getPrecision() よりも多くの桁を含む可能性があります。
剰余は、this.subtract(this.divideToIntegralValue(divisor, mc).multiply(divisor)) で得られます。これはモジュロ演算ではない(負の結果が可能)であることに留意してください。
Parameters
- divisor : ImBigDecimal
- この ImBigDecimal を除算する値。
- mc : ImMathContext
- Optional
- 使用するコンテキスト。
- ImBigDecimal
- ImMathContext の指定がない場合は this % divisor。
ImMathContext の指定がある場合は必要に応じて丸められた this % divisor。
ImMathContext の設定に従って丸められた ImBigDecimal を返します。 精度設定が 0 の場合、丸めは実行されません。
Parameters
- mc : ImMathContext
- 使用するコンテキスト。
- ImBigDecimal
- 設定に従って丸められた ImBigDecimal。
この ImBigDecimal のスケールを返します。
0 または正の場合、スケールは小数点以下の桁数です。負の場合、スケールなしの数値に、スケールの正負を逆にした値を指数とする 10 の累乗を乗算します。
たとえば、-3 のスケールでは、スケールなしの値に 1000 が乗算されます。
0 または正の場合、スケールは小数点以下の桁数です。負の場合、スケールなしの数値に、スケールの正負を逆にした値を指数とする 10 の累乗を乗算します。
たとえば、-3 のスケールでは、スケールなしの値に 1000 が乗算されます。
Returns
- Number
- ImBigDecimal のスケール(整数値)。
数値が (this * 10n) に等しい ImBigDecimal を返します。 結果のスケールは (this.scale() - n) です。
Parameters
- n : Number
- スケールを指定する10の累乗の指数(整数値)。
- ImBigDecimal
- 数値が (this * 10n) に等しい ImBigDecimal。
スケールが指定された値であり、かつスケールなしの値が、この ImBigDecimal のスケールなしの値と、総体値を維持できる適当な 10 の累乗の積または商により決定される ImBigDecimal を返します。
スケールが演算で減らされる場合、スケールなしの値は(乗算ではなく)除算する必要があり、値が変わる可能性があります。この場合、指定した丸めモードが除算に適用されます。
スケールが演算で減らされる場合、スケールなしの値は(乗算ではなく)除算する必要があり、値が変わる可能性があります。この場合、指定した丸めモードが除算に適用されます。
Parameters
- newScale : Number
- 返される ImBigDecimal の値のスケール(整数値)。
- mc : ImMathContext
- Optional
- 使用するコンテキスト。
- ImBigDecimal
- スケールが指定された値の ImBigDecimal。そのスケールなしの値は、この ImBigDecimal のスケールなしの値と、総体値を維持できる適当な 10 の累乗との積または商により決定されます。
この ImBigDecimal の符号要素を返します。
Returns
- Number
- この ImBigDecimal が負の場合は -1、ゼロの場合は 0、正の場合は 1。
数値はこれに等しいが、末尾の0が表現から削除された ImBigDecimal を返します。
Returns
- ImBigDecimal
- 末尾の 0 がすべて削除された、数値の等しい ImBigDecimal。
ImMathContext の指定がない場合は値が (this - subtrahend) でスケールが max(this.scale(), subtrahend.scale()) である ImBigDecimal を返します。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値が (this - subtrahend) である ImBigDecimal を返します。 subtrahend が 0 である場合、必要に応じて丸められた this の値が結果として使用されます。 this が 0 である場合、結果は subtrahend.negate(mc) です。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値が (this - subtrahend) である ImBigDecimal を返します。 subtrahend が 0 である場合、必要に応じて丸められた this の値が結果として使用されます。 this が 0 である場合、結果は subtrahend.negate(mc) です。
Parameters
- subtrahend : ImBigDecimal
- この ImBigDecimal から減算する値。
- mc : ImMathContext
- Optional
- 使用するコンテキスト。
- ImBigDecimal
- ImMathContext の指定がない場合は this - subtrahend。
ImMathContext の指定がある場合は必要に応じて丸められた this - subtrahend。
指数フィールドなしで、この ImBigDecimal の文字列表現を返します。
Returns
- String
- この ImBigDecimal の 10 進数の String 表現。
Static members
Static Methods
値が指定された Number の値と等しい ImBigDecimal を返します。
Parameters
- val : Number
- ImBigDecimal に変換する 値。
- ImBigDecimal
- 値が val と等しい、またはほぼ等しい ImBigDecimal。