为什么Java要舍入我的浮点计算



我是Java新手,正在学习第一步。

在做作业时,我在打印带浮点的总数时遇到了问题:

public class Hello {
public static void main(String[] args) {
System.out.println("Hello, Francesco");
int myFirstNumber = (10 + 5) + (2 * 10);
int mySecondNumber = 12;
int myThirdNumber = myFirstNumber * 2;
int myTotal = myFirstNumber + mySecondNumber + myThirdNumber;
float  myLastOne = myTotal/10;
System.out.println(myTotal);
System.out.println(myLastOne);
}
}

Java打印的是11.0:

Hello, Francesco
117
11.0

但它应该打印11.7:

Hello, Francesco
117
11.7

我知道问题出在我使用float的第8行,我甚至尝试过使用double,但我得到了相同的结果

这是因为int-division,因为10int。您需要添加后缀f以指定它是一个浮动

float myLastOne = myTotal / 10f;
System.out.println(myLastOne); // 11.7

这也适用于double

double myLastOne = myTotal / 10.0;
System.out.println(myLastOne); // 11.7

您的问题是针对语句

float  myLastOne = myTotal/10;

如果myLastOne,为什么它不进行浮点除法,而是截断除法的结果。

原因是,尽管变量myLastOne是一个浮点值,但这行代码首先计算表达式myTotal/10。由于myTotal10是整数,因此使用整数除法。这将产生整数结果11,然后将其存储在myLastOne浮点变量中,并强制转换为11.0

Java要使用float除法(这正是您想要的(,myTotal或您要除以的数字都需要是float。

float  myLastOne = (float)myTotal/10;
int float = myFirstNumber + mySecondNumber + myThirdNumber;
float  myLastOne = myTotal/10;

在Java中int/int生成int。int*int表示int。int+int生成int。int-int生成int

必须先将int强制转换为float。

float  myLastOne = (float)myTotal/10;

float  myLastOne = (float)myTotal/10.0;

myTotal10都是整数,所以Java认为应该进行整数除法。由于结果是一个整数,11.7被截断为11(在浮点中为11.0(。

若要使其输出浮点数(浮点除法(,请将至少一个操作数定义为浮点。

float myLastOne = (float)myTotal/10;
float myLastOne = myTotal/10f;
float myLastOne = (float)myTotal/10f; //All of these work

最新更新