为什么 Java 舍入我的浮点数计算?
Why Java is rounding my float calculation?
我是 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
但结果相同
在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;
这是因为 int-division
因为 10
是 int
。您需要添加后缀 f 以指定它是一个 float
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使用浮点数除法,这是你想要的,myTotal
或者你除以的数字需要是一个浮点数。
float myLastOne = (float)myTotal/10;
int float = myFirstNumber + mySecondNumber + myThirdNumber;
float myLastOne = myTotal/10;
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
我是 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
但结果相同
在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;
这是因为 int-division
因为 10
是 int
。您需要添加后缀 f 以指定它是一个 float
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使用浮点数除法,这是你想要的,myTotal
或者你除以的数字需要是一个浮点数。
float myLastOne = (float)myTotal/10;
int float = myFirstNumber + mySecondNumber + myThirdNumber;
float myLastOne = myTotal/10;
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