Тип данных BigDecimal Vs Double
Существует класс, написанный 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 ответ
В отличие от 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);