Class ImBigDecimal

Constructor

ImBigDecimal ( Number/String val, [ImMathContext mc] )
変更が不可能な、任意精度の符号付き10 進数オブジェクト。
ImBigDecimal は、任意精度のスケールなしの整数値と、32 ビット整数のスケールで構成されます。
0 または正の場合、スケールは小数点以下の桁数です。負の場合、スケールなしの数値に、スケールの正負を逆にした値を指数とする10の累乗を乗算します。
詳細については、java の java.math.BigDecimal のAPIドキュメントを参照してください。
注意事項
ImBigDecimal の仕様は基本的には java の java.math.BigDecimal の仕様に従いますが、一部仕様が異なります。

  1. java.math.BigDecimal では文字列で初期化した場合と double 型や float 型を使用して初期化した場合では誤差が生じますが、 ImBigDecimal は誤差が生じません。 詳細は以下のサンプル2を参照してください。
  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 MethodsDefined By

ImMathContext の指定がない場合は値がこの ImBigDecimal の絶対値である ImBigDecimal を返します。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値がこの ImBigDecimal の絶対値である ImBigDecimal を返します。
Parameters
mc : ImMathContext
Optional
使用するコンテキスト。
Returns
ImBigDecimal
ImMathContext の指定がない場合は abs(this)。
ImMathContext の指定がある場合は必要に応じて丸められた abs(this)。
ImMathContext の指定がない場合は値が (this + augend) でスケールが max(this.scale(), augend.scale()) である ImBigDecimal を返します。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値が (this + augend) である ImBigDecimal を返します。
どちらかの数値が 0 で精度設定が 0 以外である場合、必要に応じて丸められたほかの数値が結果として使用されます。
Parameters
augend : ImBigDecimal
この ImBigDecimal で加算する値。
mc : ImMathContext
Optional
使用するコンテキスト。
Returns
ImBigDecimal
ImMathContext の指定がない場合は this + augend。
ImMathContext の指定がある場合は必要に応じて丸められた this + augend。
この ImBigDecimal を指定された ImBigDecimal と比較します。
このメソッドでは、値は等しいがスケールが異なる2つの ImBigDecimal オブジェクト(たとえば、2.0と2.00)が等しいと見なされます。
Parameters
val : ImBigDecimal
この ImBigDecimal と比較する ImBigDecimal。
Returns
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) : 適用する丸めモード。
Returns
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 配列を返します。
Parameters
divisor : ImBigDecimal
この ImBigDecimal を除算する値、および計算された剰余。
mc : ImMathContext
Optional
使用するコンテキスト。
Returns
Array
2要素の ImBigDecimal 配列。商 (divideToIntegralValue の結果) が最初の要素で、剰余が最後の要素。
ImMathContext の指定がない場合は値が丸められた商 (this / divisor) の整数部である ImBigDecimal を返します。 結果の優先スケールは (this.scale() - divisor.scale()) です。
ImMathContext の指定がある場合は値が (this / divisor) の整数部である ImBigDecimal を返します。 正確な商の整数部は丸めモードに依存しないため、丸めモードはこのメソッドにより返される値に影響を及ぼしません。
Parameters
divisor : ImBigDecimal
この ImBigDecimal を除算する値。
mc : ImMathContext
Optional
使用するコンテキスト。
Returns
ImBigDecimal
this / divisor の整数部。
equals ( Object x ) : Boolean ImBigDecimal
この ImBigDecimal と指定された Object が同じかどうか比較します。
Parameters
x : Object
この ImBigDecimal と比較する Object。
Returns
Boolean
指定された Object が ImBigDecimal で、その値とスケールがこの ImBigDecimal と等しい場合にだけ true。
この ImBigDecimal と val の最大値を返します。
Parameters
val : ImBigDecimal
最大値の計算に使用する値。
Returns
ImBigDecimal
この ImBigDecimal と val のうちで大きい方の値を持つ ImBigDecimal。値が等しい場合は、this の値を持つ ImBigDecimal が返されます。
この ImBigDecimal と val の最小値を返します。
Parameters
val : ImBigDecimal
最小値の計算に使用する値。
Returns
ImBigDecimal
この ImBigDecimal と val のうちで小さい方の値を持つ ImBigDecimal。値が等しい場合は、this の値を持つ ImBigDecimal が返されます。
小数点を n 桁左へ移動してこれに等しい ImBigDecimal を返します。
n が負でない場合は、スケールに n を単に加算します。 n が負の場合は、movePointRight(-n) に等しくなります。
この呼出しによって返される ImBigDecimal は、値 (this × 10-n) およびスケール max(this.scale() + n, 0) となります。
Parameters
n : Number
小数点を左へ移動する桁数(整数値)。
Returns
ImBigDecimal
小数点を n 桁左へ移動した、これに等しい ImBigDecimal。
小数点を n 桁右へ移動してこれに等しい ImBigDecimal を返します。
n が負でない場合は、スケールから n を単に減算します。n が負の場合は、movePointLeft(-n) に等しくなります。
この呼出しによって返される ImBigDecimal は、値 (this × 10n) およびスケール max(this.scale() - n, 0) となります。
Parameters
n : Number
小数点を右へ移動する桁数(整数値)。
Returns
ImBigDecimal
小数点を n 桁右へ移動した、これに等しい ImBigDecimal。
ImMathContext の指定がない場合は値が (this × multiplicand) でスケールが (this.scale() + multiplicand.scale()) である ImBigDecimal を返します。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値が (this × multiplicand) である ImBigDecimal を返します。
Parameters
multiplicand : ImBigDecimal
この ImBigDecimal で乗算する値。
mc : ImMathContext
Optional
使用するコンテキスト。
Returns
ImBigDecimal
ImMathContext の指定がない場合は this * multiplicand。
ImMathContext の指定がある場合は必要に応じて丸められた this * multiplicand。
ImMathContext の指定がない場合は値が (-this) で スケールが this.scale() である ImBigDecimal を返します。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値が (-this) である ImBigDecimal を返します。
Parameters
mc : ImMathContext
Optional
使用するコンテキスト。
Returns
ImBigDecimal
ImMathContext の指定がない場合は -this。
ImMathContext の指定がある場合は必要に応じて丸められた -this。
numberValue ( ) : Number ImBigDecimal
この ImBigDecimal を Number に変換します。
この変換により ImBigDecimal 値の精度に関する情報が失われる可能性があります。
Returns
Number
Number に変換されたこの ImBigDecimal。
ImMathContext の指定がない場合は値が (thisn) である ImBigDecimal を返します。
ImMathContext の指定がある場合はコンテキスト設定に従った丸めを使用して、値が (thisn) である ImBigDecimal を返します。
Parameters
n : Number
この ImBigDecimal の累乗(整数値)。
mc : ImMathContext
Optional
使用するコンテキスト。
Returns
ImBigDecimal
ImMathContext の指定がない場合は thisn
ImMathContext の指定がある場合は必要に応じて丸められた thisn
precision ( ) : Number ImBigDecimal
この 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)) で得られます。これはモジュロ演算ではない(負の結果が可能)であることに留意してください。
Parameters
divisor : ImBigDecimal
この ImBigDecimal を除算する値。
mc : ImMathContext
Optional
使用するコンテキスト。
Returns
ImBigDecimal
ImMathContext の指定がない場合は this % divisor。
ImMathContext の指定がある場合は必要に応じて丸められた this % divisor。
ImMathContext の設定に従って丸められた ImBigDecimal を返します。 精度設定が 0 の場合、丸めは実行されません。
Parameters
mc : ImMathContext
使用するコンテキスト。
Returns
ImBigDecimal
設定に従って丸められた ImBigDecimal。
scale ( ) : Number ImBigDecimal
この ImBigDecimal のスケールを返します。
0 または正の場合、スケールは小数点以下の桁数です。負の場合、スケールなしの数値に、スケールの正負を逆にした値を指数とする 10 の累乗を乗算します。
たとえば、-3 のスケールでは、スケールなしの値に 1000 が乗算されます。
Returns
Number
ImBigDecimal のスケール(整数値)。
数値が (this * 10n) に等しい ImBigDecimal を返します。 結果のスケールは (this.scale() - n) です。
Parameters
n : Number
スケールを指定する10の累乗の指数(整数値)。
Returns
ImBigDecimal
数値が (this * 10n) に等しい ImBigDecimal。
setScale ( Number newScale, [ImMathContext mc] ) : ImBigDecimal ImBigDecimal
スケールが指定された値であり、かつスケールなしの値が、この ImBigDecimal のスケールなしの値と、総体値を維持できる適当な 10 の累乗の積または商により決定される ImBigDecimal を返します。
スケールが演算で減らされる場合、スケールなしの値は(乗算ではなく)除算する必要があり、値が変わる可能性があります。この場合、指定した丸めモードが除算に適用されます。
Parameters
newScale : Number
返される ImBigDecimal の値のスケール(整数値)。
mc : ImMathContext
Optional
使用するコンテキスト。
Returns
ImBigDecimal
スケールが指定された値の ImBigDecimal。そのスケールなしの値は、この ImBigDecimal のスケールなしの値と、総体値を維持できる適当な 10 の累乗との積または商により決定されます。
signum ( ) : Number ImBigDecimal
この 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) です。
Parameters
subtrahend : ImBigDecimal
この ImBigDecimal から減算する値。
mc : ImMathContext
Optional
使用するコンテキスト。
Returns
ImBigDecimal
ImMathContext の指定がない場合は this - subtrahend。
ImMathContext の指定がある場合は必要に応じて丸められた this - subtrahend。
指数フィールドなしで、この ImBigDecimal の文字列表現を返します。
Returns
String
この ImBigDecimal の 10 進数の String 表現。

Static members

Static MethodsDefined By

valueOf ( Number val ) : ImBigDecimal Static ImBigDecimal
値が指定された Number の値と等しい ImBigDecimal を返します。
Parameters
val : Number
ImBigDecimal に変換する 値。
Returns
ImBigDecimal
値が val と等しい、またはほぼ等しい ImBigDecimal。