BigDecimal数据类型为Vs Double

时间:2018-06-06 18:41:31

标签: java matrix double bigdecimal jama

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维的矩阵,其数据类型为double,这意味着它在点(。)之后需要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);
}
 }

此处数据类型也是double,但输出为7.456148260155。所以这里需要这个大数字,但在矩阵类中它不能占用这个大数字。

1 个答案:

答案 0 :(得分:3)

doubleString不同,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);