写这道题目,我是使用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()直接截断。