gpt4 book ai didi

java - Java 中的四舍五入?

转载 作者:行者123 更新时间:2023-12-01 07:57:09 24 4
gpt4 key购买 nike

我的任务如下:

将 20 对数字(分别是 ID 号和分数)读取到两个单独的数组中。求平均分。打印如下所示的表格,其中包含每个学生的 ID、分数和差异(分数 - 平均),每行一个学生。如图所示,在表的顶部打印分数的总和、平均值和计数。将平均值和差值四舍五入到小数点后两位。

我的程序中有一个错误,应该非常简单,但由于某种原因我无法弄清楚。我已经弄清楚了如何完成整个事情,但由于某种原因,我的减法失败了。以下是供引用的示例输出:

ID  Score   Difference
115 257.0 14.349999999999994
123 253.0 10.349999999999994
116 246.0 3.3499999999999943
113 243.0 0.3499999999999943
112 239.0 -3.6500000000000057
104 239.0 -3.6500000000000057
110 238.0 -4.650000000000006
218 243.0 0.3499999999999943
208 242.0 -0.6500000000000057
222 223.0 -19.650000000000006
223 230.0 -12.650000000000006
213 229.0 -13.650000000000006
207 228.0 -14.650000000000006
203 224.0 -18.650000000000006
305 265.0 22.349999999999994
306 262.0 19.349999999999994
311 256.0 13.349999999999994
325 246.0 3.3499999999999943
321 245.0 2.3499999999999943
323 245.0 2.3499999999999943

问题是,当我调用我的程序来打印它计算出的平均值时,它是一个很好的四舍五入的 242.65。由于分数[k]显然也是一个整数,我不明白这是怎么发生的?您有什么办法可以阐明这里出了什么问题吗?

import java.util.Scanner;
import java.io.*;

public class prog402a
{
public static void main(String args[])
{
Scanner inFile = null;
try
{
inFile = new Scanner(new File("prog402a.dat"));
}
catch (FileNotFoundException e)
{
System.out.println("File not found!");
System.exit(0);
}

int[] idNumber = new int[20];
double[] score = new double[20];

for(int k = 0; k < idNumber.length; k++)
{
idNumber[k] = inFile.nextInt();
score[k] = inFile.nextDouble();
}

double sum = 0;

for(int k = 0; k < score.length; k++)
{
sum += score[k];
}

double doubSum = (double)sum;
double average = doubSum/20.0;
average=(int)(average*100+.5)/100.0;
System.out.println(average);

System.out.println("ID\tScore\tDifference");
for(int k = 0; k < idNumber.length; k++)
{
System.out.println(idNumber[k] + "\t" + score[k] + "\t" + (score[k] - average));
}



inFile.close();

}
}

最佳答案

float (例如 Java 中的 float 和 double )则不然
编程语言和数学一样具有 100% 的精度。

所以很可能是一个很好的整数(十进制),例如

242.65

在内部(例如在 JVM 中)表示为242.64999999997。

我只是粗略地说一下,但你明白了。

在打印每个数字之前,只需将其格式化为小数点后第二位,就可以了。让我尝试为您编写一个小示例...如下:

import java.text.DecimalFormat;
import java.text.NumberFormat;

public class Test020 {

public static void main(String[] args) {

double d = 13.5 + 0.1 + 0.11;

System.out.println(d);

NumberFormat formatter = new DecimalFormat("#0.00");
System.out.println(formatter.format(d));

}

}

关于java - Java 中的四舍五入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28611252/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com