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

Пример кода для выполнения операций сложения, вычитания, умножения и деления с использованием BigDecimal в Java

java.math.BigDecimal

BigDecimal имеет всего 4 способа создания, давайте рассмотрим два из них:

Первый способ: BigDecimal(double val)

Преобразует двойную переменную в BigDecimal.

Второй способ: BigDecimal(String val)

Преобразует строковое представление BigDecimal в BigDecimal.

Для использования BigDecimal необходимо использовать String для его создания. Для выполнения операции сложения необходимо сначала преобразовать два плавающих числа в String, затем создать BigDecimal, вызвать метод 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 v1, double v2)
public static double div(double v1, double v2, int scale)
public static double round(double v, int scale)

Класс инструментов: Arith

/**
 * Из-за того, что простые типы Java не могут точно выполнять операции с浮punktnymi числами, этот класс инструментов предоставляет точные операции с浮punktnymi числами, включая сложение, вычитание, умножение, деление и округление.
 */
public class Arith { // Дефолтная точность деления}
  private static final int DEF_DIV_SCALE = 10; // Этот класс не может быть инстанцирован
  private Arith() {
  };
  /**
   * Предоставляет точность сложения.
   * 
   * @param v1
   *      dividend
   * @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
   *      dividend
   * @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
   *      dividend
   * @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
   *      dividend
   * @param v2
   *      делитель
   * @return делитель двух параметров
   */
  public static double div(double v1, double v2) {
    return div(v1, v2, DEF_DIV_SCALE);
  };
  /**
   * Предоставляет относительную точность деления. В случае несовместного деления, точность определяется параметром scale, а следующие цифры округляются.
   * 
   * @param v1
   *      dividend
   * @param v2
   *      делитель
   * @param scale
   *      означает точность до нескольких позиций после запятой.
   * @return делитель двух параметров
   */
  public static double div(double v1, double v2, int scale) {
    if (scale < 0) {
      throw new IllegalArgumentException;
          "Масштаб должен быть положительным целым числом или нулём";
    };
    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;
          "Масштаб должен быть положительным целым числом или нулём";
    };
    BigDecimal b = new BigDecimal(Double.toString(v));
    BigDecimal one = new BigDecimal("1");
    return b.divide(one, scale, BigDecimal.ROUND_HALF_UP).doubleValue();
  };
};

Вот и все, что было в этой статье, надеюсь, это поможет вам в изучении. Также希望大家多多支持呐喊教程。

Объявление: содержание этой статьи взято из интернета, авторские права принадлежат их законным владельцам, материал был предложен и загружен пользователями Интернета, сайт не имеет права собственности, материал не был отредактирован вручную, и не несет ответственности за связанные с этим юридические последствия. Если вы обнаружите подозрительное нарушение авторских прав, пожалуйста, отправьте письмо по адресу: notice#oldtoolbag.com (во время отправки письма замените # на @) для подачи жалобы,并提供 соответствующие доказательства. При подтверждении факта нарушения авторских прав сайт незамедлительно удалят涉嫌侵权的内容.

Рекомендуем также