写这道题目,我是使用DecimalFormat()方法保留两位小数的,一开始看给的列子,的确通过了,但是当我提交的时候没有ac 题目描述 给定一个正整数,计算1-1/2+1/4-1/8+1/16……的前n项之和。
输入要求 输入一个正整数n。
输出要求 输出前n项之和,保留2位小数。
输入样例 5
输出样例 0.69
思路我不说了,直接看代码
import java.text.DecimalFormat;
import java.time.LocalDate;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
int number;
double sum = 0;
double factor = 1;
int flag = 1;
Scanner scanner = new Scanner(System.in);
//DecimalFormat decimalFormat=new DecimalFormat("0.00");
number = scanner.nextInt();
for (int i = 1; i <= number; i++) {
if (i % 2 == 0) {
sum = sum + (-1) * 1.0 / factor;
} else {
sum = sum + 1.0 / factor;
}
factor = factor * 2;
}
System.out.println(String.format("%.2f", sum));
}
}
这代码是正确的,之前我一直使用:
DecimalFormat decimalFormat=new DecimalFormat("0.00");
但是这道题就不行了,String.format("%.3f",a);//a被四舍五入后截断; DecimalFormat decimalFormat=new DecimalFormat("0.000"); DecimalFomat(decimalFormat(a));//a被直接截断为3位数。 如果数据等于0.625,用上面的方法结果是:0.63;用下面的结果是:0.62. 我也不想细细研究了,记住就行,怎么记? String.format()四舍五入后再截断; DecimalFort()直接截断。