计算BMI和如何防止浮点舍入(Java)

计算BMI和如何防止浮点舍入(Java),java,rounding,Java,Rounding,我正在写一个程序来计算一个人的体重指数。这是给我的任务: 体重指数BMI是衡量健康与体重的指标。它可以通过以千克为单位的体重除以以米为单位的身高的平方来计算。编写一个程序,提示用户输入以磅为单位的体重W和以英寸为单位的身高H,并显示BMI。请注意,一磅等于0.45359237千克,一英寸等于0.0254米 输入:第1行实数在50到200之间 第2行10到100之间的实数 输出:BMI值浮点只能打印到第二个小数点 问题是,每当我使用System.out.printf%.2f\n,BMI时,输出都会

我正在写一个程序来计算一个人的体重指数。这是给我的任务:

体重指数BMI是衡量健康与体重的指标。它可以通过以千克为单位的体重除以以米为单位的身高的平方来计算。编写一个程序,提示用户输入以磅为单位的体重W和以英寸为单位的身高H,并显示BMI。请注意,一磅等于0.45359237千克,一英寸等于0.0254米

输入:第1行实数在50到200之间 第2行10到100之间的实数

输出:BMI值浮点只能打印到第二个小数点

问题是,每当我使用System.out.printf%.2f\n,BMI时,输出都会向上舍入,而不是截断小数点的其余部分。这是我的密码:

import java.util.Scanner;
public class Main
{

    public static void main(String[] args)
    {
        Scanner input = new Scanner(System.in);
        double weight = input.nextDouble();
        double height = input.nextDouble();

        double weightKG;
        double heightM;
        double heightMSquare;
        double BMI;

        final double kilogram = 0.45359237;
        final double meter = 0.0254;

        while ((weight > 200) || (weight < 50)) // Error catching code.
        {
            weight = input.nextDouble();
        }
        while ((height > 100) || (height < 10))
        {
            height = input.nextDouble();
        }

        weightKG = weight * kilogram; // Convert pounds and inches to 
kilograms and meters.
        heightM = height * meter;

        heightMSquare = Math.pow(heightM, 2); // Compute square of height in 
meters.

        BMI = weightKG / heightMSquare; // Calculate BMI by dividing weight 
by height.

        System.out.printf("%.2f\n", BMI);
    }
}

下面是我写的一个方法,它通过正则表达式和字符串操作来解决这个问题

private static String format2Dp(double x) {
    String d = Double.toString(x);
    Matcher m = Pattern.compile("\\.(\\d+)").matcher(d);
    if (!m.find()) {
        return d;
    }
    String decimalPart = m.group(1);
    if (decimalPart.length() == 1) {
        return d.replaceAll("\\.(\\d+)", "." + decimalPart + "0");
    }
    return d.replaceAll("\\.(\\d+)", "." + decimalPart.substring(0, 2));
}
我所做的是将double转换为字符串,从中提取小数部分,然后将小数部分替换为substring。如果小数部分只有1个字符长,请在末尾加一个零

这种方法也适用于用科学符号表示的数字