java - 将值四舍五入到两位小数但仍然在 Eclipse (Java) 中返回 10 位小数?

标签 java eclipse matrix double rounding

我是这个网站的新手。我对 Java 中的舍入有疑问。

原始代码很长,但我会提供我的问题所在的片段。

以下是我拥有的三个矩阵之一:

//European Put Option Matrix
    double[][] euroMatrix = new double[n+1][n+1];

    for(int i = 0; i <= n-1; i++){
        double j = K - americanMatrix[n][i];
        if(j >= 0)
            euroMatrix[n][i] = j;
    }
    double expTermNeg = (Math.exp((-1)*r * (T/n)));
    for(int i = n-1; i >= 0; i--){
        for(int j = 0; j <= i; j++){
            euroMatrix[i][j] = 0.01*Math.floor((expTermNeg * (p*euroMatrix[i+1][j+1] + (1 - p)*euroMatrix[i+1][j]))*100.00);
        }
    }

请注意,americanMatrix[][] 显示了两位小数以内的所有值。

但是,当我输出 euroMatrix[][] 时,我得到以下结果:

22.0    14.689999999999998  5.479999999999997   0.0 0.0 0.0

请注意,这只是矩阵的最后一行。

我想知道为什么我会得到像 14.689999.. 这样的值。当我清楚地知道 (0.01 * Math.floor(x*100)) 的漂亮舍入技巧时?

另外,你们建议我应该如何修复它?

最佳答案

以下代码使用DecimalFormat对象来处理输出。很酷的是 DecimalFormat.format()可以处理原始 double值(请参阅自动装箱),因此您只需传入 euroMatrix 中的值即可直接:

for (int i=n-1; i >= 0; i--) {
    for (int j=0; j <= i; j++) {
        euroMatrix[i][j] = 0.01*Math.floor((expTermNeg * (p*euroMatrix[i+1][j+1] + (1 - p)*euroMatrix[i+1][j]))*100.00);
        DecimalFormat df = new DecimalFormat();
        df.setMaximumFractionDigits(2);
        df.setMinimumFractionDigits(0);
        String result = df.format(euroMatrix[i][j]);
        System.out.println(result); // prints 5.48 for 5.479999999999997
    }
}

关于java - 将值四舍五入到两位小数但仍然在 Eclipse (Java) 中返回 10 位小数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29763324/

相关文章:

java - 使用 nstask 从 swift 应用程序运行 jar 文件

java - 为后台任务替换作用域 session bean

java - 嵌套获取性能

java - 如何才能让 Eclipse 在我编辑代码时自动更新窗口中的代码?

C - 矩阵主线和反对角线(替换)

python - 开放量子系统建模

matlab - 在Matlab中切出方阵的一部分

Java 字节集

java - Eclipse Kepler 在警告上显示错误标记

java - ]] 字符阻止 Eclipse 控制台工作