问题是,每当我使用“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转换成字符串,从其中提取小数部分,并对小数部分进行子串。如果小数部分只有1个字符长,则在末尾添加一个零。
这种方法也适用于用科学符号表示的数字。
例如,当我在控制台中运行0.1+0.2时,它返回0.300000000000000004。然而,当我运行0.1+0.3时,它正确地返回0.4。 是否有任何逻辑可以确定哪些特定的浮动不会被“正确”舍入?
C和C++提供了几种宽度的浮点数据类型,但它们没有指定精度。编译器可以自由地使用理想化的算术来简化表达式,使用双精度来计算值上的表达式,或者使用双精度寄存器来保留变量或公共子表达式的值。 纠正我如果我是错的是错的,请参见编辑,但是将内存中的提升到双精度寄存器中也是合法的,所以存储一个值然后加载回来并不一定会截断位。 将一个数字转换成一个较低精度的最安全、最便携的方法是什么?理想情况下,在SSE2上
问题内容: 假设我有,我想将其转换为。如何在Python中完成此操作? 给与不。我是Python或一般编程的新手。 我不想将其打印为字符串,结果将被进一步使用。有关此问题的更多信息,请查看 Tim Wilson的Python编程技巧:贷款和付款计算器 。 问题答案: (或的结果)正确舍入为小数点后两位。数学上,这听起来像您想要的是天花板功能。Python模块中的一个名为: 地板和天花板功能通常分别
我将货币值作为浮动存储在mysql表中。 问题是,mysql正在向上或向下舍入数字。 例如,12345.68四舍五入为12345.7 如何停止此操作,或者是否应该使用更好的数据类型? 我希望将原始值保留在小数点后2位以内。
本节讨论了精度数学的四舍五入特性,ROUND()函数,以及插入DECIMAL列时的四舍五入特性。 ROUND()函数的行为取决于其参量是准确的还是近似的: ·对于准确值数值,ROUND()采用“半值向上舍入”规则:如果小数部分的值为.5或更大,如果是正数,向上取下一个整数,如果是负数,向下取下一个整数(换句话讲,以0为界限执行舍入)。如果小数部分的值小于.5,如果是正数,向下取下一个整数,如果是负
我写了这段代码,它只是对n个数字的列表进行求和,以练习浮点运算,但我不明白这一点: 我正在使用float,这意味着我有7位精度,因此,如果我执行10002*10002=100040004的操作,数据类型float的结果将是100040000.000000,因为我丢失了第7位以外的任何数字(程序仍然知道指数,如图所示)。 如果此程序中的输入是 然而,您将看到,当这个程序计算30003*30003=9