Почему Java округляет мой расчет с плавающей точкой? - PullRequest
0 голосов
/ 02 апреля 2020

Я новичок в 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

Я знаю, что проблема находится в строке 8, где я использую float, я даже пытался использовать double, но у меня тот же результат

Ответы [ 4 ]

3 голосов
/ 02 апреля 2020

Это из-за 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
1 голос
/ 02 апреля 2020

Ваш вопрос по поводу утверждения

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;
1 голос
/ 02 апреля 2020

В Java int / int делает int. int * int делает int. int + int делает int. int - int делает int.

Вы должны разыграть int для первого плавания.

float  myLastOne = (float)myTotal/10;

или

float  myLastOne = (float)myTotal/10.0;
0 голосов
/ 02 апреля 2020

И 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
...