将值舍入为两位小数但在 Eclipse (Java) 中仍返回 10 位小数?
Rounding values to two decimals but still returning 10 decimals digits in Eclipse (Java)?
我是这个网站的新手。我对 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 中的四舍五入有疑问。
原始代码很长,但我会提供我的问题所在的片段。
以下是我拥有的三个矩阵之一:
//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
}
}