如何获得小数点后仅两位数的双精度值。 我收到的输出给我BMI = 23.053626543209877,如果我的身高输入为72,体重为170.我不知道如何摆脱.05后的尾随数字
这是我的代码:
import java.util.Scanner;
public class bmi {
private static Scanner scanner;
public static void main(String[] args) {
// Variables
double height;
double weight;
double bmi;
Scanner keyboard = new Scanner(System.in);
System.out.println("Please enter your height: ");
height = keyboard.nextDouble();
if(height<=0)
{
System.out.println("That's an invalid height.");
return;
}
System.out.println("Please enter your weight: ");
weight = keyboard.nextDouble();
if(weight<=0)
{
System.out.println("That's an invalid weight.");
return;
}
bmi = calculateBMI(height, weight);
System.out.println("BMI = " + bmi);
System.out.println(bmiDescription(bmi));
keyboard.close();
}
static double calculateBMI (double height, double weight) {
return weight * 703 / (height * height);
}
static String bmiDescription (double bmi) {
if (bmi < 18.5) {
return "You are underweight.";
} else {
if (bmi > 25) {
return "You are overweight.";
} else {
return "You are optimal.";
}
}
}
}
答案 0 :(得分:1)
您可以将格式化的io与printf
一起使用,例如
double bmi = 23.053626543209877;
System.out.printf("BMI = %.2f%n", bmi);
输出(我相信你想要,甚至会进行四舍五入)
BMI = 23.05
答案 1 :(得分:0)
在处理数字时最好保持精确度,但在某些情况下,深度精度并不是真正的主要问题。如果要将特定的双精度数据类型变量设置为特定的小数精度,则可以将Double类型值传递给如下方法:
double bmi = round(23.053626543209877, 2);
System.out.println("BMI = " + bmi);
private static double round(double value, int precision) {
int scale = (int) Math.pow(10, precision);
return (double) Math.round(value * scale) / scale;
}
输出将是:
BMI = 23.05
正如方法名称所示,返回的结果也是四舍五入的。
答案 2 :(得分:0)
这是我使用的一种方便的方法:
public static double round (double value, int precision) {
int scale = (int) Math.pow(10, precision);
return (double) Math.round(value * scale) / scale;
}
只需传入您的值,然后传入精度(要显示的小数位数)。
例如:round(2.3891237, 2)
将返回2.39
答案 3 :(得分:0)
在calculateBMI()中执行以下操作。
[1 1 1]
x 将是您计算的双倍值。