Тип данных BigDecimal Vs Double - PullRequest
0 голосов
/ 06 июня 2018

Существует класс, написанный Jama Matrix на Java.Класс подобен этому

public Matrix (int m, int n, double s) {
  this.m = m;
  this.n = n;
  A = new double[m][n];
  for (int i = 0; i < m; i++) {
     for (int j = 0; j < n; j++) {
        A[i][j] = s;
     }
  }
}

. Он может создать матрицу с размером m * n, тип данных которого двойной, что означает, что он принимает 6 цифр после точки (.).Но мне нужна матрица, которая может принимать минимум 10 цифр после точки (например, 12.1234567890).Поэтому после поиска я нахожу тип данных BigDecimal, который может принимать этот тип значения.Поэтому я немного модифицирую предыдущий код.

 public Matrix(int m,int n,BigDecimal s){
   this.m=m;
   this.n=n;
   A= new BigDecimal[m][n];
   for(int i=0;i<m;i++){
       for(int j=0;j<n;j++){
           A[i][j]=s;
       }
   }
}

Но он выдает ошибку.Есть ли другой тип данных, который используется в Java для числа с плавающей запятой.

Я немного запутался, когда запускаю этот код

 public class T {
public static void main(String args[]){
    double a= 3.256147001235;
    double b=4.200001258920;
    double c=a+b;
    System.out.println(c);
}
 }

Здесь тип данных также удваивается, но вывод 7.456148260155.Итак, здесь это большое число, но в матричном классе оно не может быть таким большим.

1 Ответ

0 голосов
/ 06 июня 2018

В отличие от double или String, BigDecimal не имеет встроенной поддержки компилятора Java для конструирования объектов с литералами.Вам необходимо создать его с помощью конструктора или вызова valueOf, в зависимости от источника данных:

Matrix bigDecimalMatrix = new Matrix(100, 80, BigDecimal.valueOf(4.200001258920));

или

Matrix bigDecimalMatrix = new Matrix(100, 80, new BigDecimal("4.200001258920"));

Аналогично, BigDecimal не имеетподдержка компилятора для выполнения арифметических операций.Следовательно, вместо

double c = a + b;

вам нужно написать

BigDecimal c = a.add(b);
...