我是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
,因为10
是int
。您需要添加后缀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
。由于myTotal
和10
是整数,因此使用整数除法。这将产生整数结果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;
myTotal
和10
都是整数,所以Java认为应该进行整数除法。由于结果是一个整数,11.7
被截断为11
(在浮点中为11.0
(。
若要使其输出浮点数(浮点除法(,请将至少一个操作数定义为浮点。
float myLastOne = (float)myTotal/10;
float myLastOne = myTotal/10f;
float myLastOne = (float)myTotal/10f; //All of these work