在我的Java
文件中,我构建了一种方法来计算文本文件中数字列表的差异。
该功能如下所示
public void varience(File commaSeperated) {
List<String> dataToSplit = new ArrayList<String>();
try {
BufferedReader br = new BufferedReader(new FileReader(commaSeperated));
String currentLine;
while ((currentLine = br.readLine()) != null) {
String[] tempArray = currentLine.split(",");
for(String s : tempArray) {
dataToSplit.add(s.replaceAll("\t", "").replaceAll("\n", "").trim());
}
}
br.close();
} catch(Exception e) {
e.printStackTrace();
}
BigDecimal finalD = new BigDecimal("0");
int count = 0;
for(String temp : dataToSplit) {
finalD = finalD.add(new BigDecimal(temp));
count++;
}
System.out.println("Elements: " + count + ", Sum: " + finalD + ", Average: " + (finalD.divide(new BigDecimal(count))));
BigDecimal average = finalD.divide(new BigDecimal(count));
count = 0;
BigDecimal finalVar = new BigDecimal(0);
for(String temp : dataToSplit) {
BigDecimal tempBD = ((new BigDecimal(temp)).subtract(average)).pow(2);
finalVar = finalVar.add(tempBD);
count++;
System.out.println("Original Value: " + temp + ", Pass: " + count + ", Adding: " + tempBD + ", CurrentValue: " + finalVar);
}
System.out.println(finalVar.divide(new BigDecimal(count))); //This prints the variance
}
文件中的列表如下
7.1,7.1,7.1,7.1,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.8,7.8,7.8,7.8,7.8,7.8,7.9,7.9
使用此功能,程序会将方差值打印为0.034899
。但是,当我决定通过外部源传递数字列表时,返回了不同的值0.034898999999923
。这已经解决了here。
所以问题:我的代码在某种程度上是错误的,还是由于某种原因截断了最终值的精度,或者我的代码是否正确以及外部源返回的答案是否错误?