为什么 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 因为 10int。您需要添加后缀 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。由于 myTotal10 是整数,所以它使用整数除法。这导致整数结果 11,然后将其存储在 myLastOne 浮点变量中,转换为 11.0.

为了Java使用浮点数除法,这是你想要的,myTotal或者你除以的数字需要是一个浮点数。

float  myLastOne = (float)myTotal/10;

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

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