java - BigDecimal 数据类型与 Double

标签 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中是否有任何其他数据类型用于 float 。

运行这段代码时我有点困惑

 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。所以这里它取了这么大的数字,但在矩阵类中它不能取这么大的数字。

最佳答案

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);

关于java - BigDecimal 数据类型与 Double,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50727412/

相关文章:

java - 为工作流系统建议持久性策略

c - 从文件读取并存储到C中动态分配的二维数组中

java - 我可以从两个整数中设置一个 double 吗?

c - 分配给 double 据类型的位数

java - 有没有办法在 Java 正则表达式中包含 DOT 但不包含双整数?

java - 使用 context.getSystemService 找不到 NsdManager

java - 关于 JPEG MCU 的详细信息

java - 重新启动设备后如何重新启动我的应用程序?

r - 从概率有向图的一阶邻接矩阵计算二阶邻接矩阵的快速算法

c - 将 R 矩阵传递给低级 .C 函数,访问数组以更改其值