English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

【Java】BigDecimalの加減乗除演算の例コード

java.math.BigDecimal

BigDecimalには合計4いくつかのメソッドがあります。まず、その中の二つの使い方を見てみましょう:

第一种:BigDecimal(double val)

doubleをBigDecimalに変換します。

第2種:BigDecimal(String val)

BigDecimalの文字列表現をBigDecimalに変換します。

BigDecimalを使用する場合、Stringで構築する必要があります。加法演算を行うために、まず浮動小数点数をStringに変換し、BigDecimalに変換し、その中の1つにaddメソッドを呼び出し、他の引数として他のものを渡し、その結果(BigDecimal)を再度浮動小数点数に変換します。

public static double add(double v1, double v2)
public static double sub(double v1, double v2)
public static double mul(double v1, double v2)
public static double div(double v}}1, double v2)
public static double div(double v}}1, double v2, int scale)
public static double round(double v, int scale)

ユーティリティクラス:Arith

/**
 * Javaのシンプルな型は浮動小数点数に対して正確な演算ができませんので、このユーティリティクラスは正確な浮動小数点数演算、加減乗除と四捨五入を提供します。
 */
public class Arith { // デフォルトの除法演算精度
  private static final int DEF_DIV_SCALE = 10; // このクラスはインスタンス化できません
  private Arith() {
  }
  /**
   * 正確な加法演算を提供します。
   * 
   * @param v1
   *      被加数
   * @param v2
   *      加数
   * @return 両方の引数の和
   */
  public static double add(double v1, double v2) {
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.add(b2).doubleValue();
  }
  /**
   * 正確な減法演算を提供します。
   * 
   * @param v1
   *      被減数
   * @param v2
   *      減数
   * @return 両方の引数の差
   */
  public static double sub(double v1, double v2) {
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.subtract(b2).doubleValue();
  }
  /**
   * 正確な乗法演算を提供します。
   * 
   * @param v1
   *      被乗数
   * @param v2
   *      乗数
   * @return 両方の引数の積
   */
  public static double mul(double v1, double v2) {
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.multiply(b2).doubleValue();
  }
  /**
   * 割り切れない場合、小数点以下に正確に四捨五入する正確な除法演算を提供します。10桁、その後の数字は四捨五入されます。
   * 
   * @param v1
   *      被除数
   * @param v2
   *      除数
   * @return 両方の引数の商
   */
  public static double div(double v}}1, double v2) {
    return div(v1, v2, DEF_DIV_SCALE);
  }
  /**
   * (相対的)正確な除法演算を提供します。割り切れない場合、scale引数で指定された精度に基づいて四捨五入します。
   * 
   * @param v1
   *      被除数
   * @param v2
   *      除数
   * @param scale
   *      小数点以下の桁数まで正確にする必要があります。
   * @return 両方の引数の商
   */
  public static double div(double v}}1, double v2, int scale) {
    if (scale < 0) {
      throw new IllegalArgumentException(
          "The scale must be a positive integer or zero"
    }
    BigDecimal b1 = new BigDecimal(Double.toString(v1));
    BigDecimal b2 = new BigDecimal(Double.toString(v2));
    return b1.divide(b2, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
  }
  /**
   * 正確な小数桁数の四捨五入処理を提供します。
   * 
   * @param v 四捨五入する数字
   * @param scale 小数点以下の桁数
   * @return 四捨五入後の結果
   */
  public static double round(double v, int scale) {
    if (scale < 0) {
      throw new IllegalArgumentException(
          "The scale must be a positive integer or zero"
    }
    BigDecimal b = new BigDecimal(Double.toString(v));
    BigDecimal one = new BigDecimal("1");
    return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
  }
};

これで本文のすべてが終わり、皆さんの学習に役立つことを願っています。また、ナイアラガイドのサポートを多くいただければ幸いです。

声明:本文の内容はインターネットから取得しており、著作権者に帰属します。インターネットユーザーが自発的に貢献し、自己でアップロードしました。本サイトは所有権を持ちません。また、人工的な編集は行われていません。著作権侵害が疑われる内容がある場合は、メールを notice#w までお送りください。3codebox.com(メール送信時は、#を@に置き換えてください。報告を行い、関連する証拠を提供してください。一旦確認がとりあえず、本サイトは侵害が疑われるコンテンツをすぐに削除します。)

おすすめ