Как исправить ошибки в вычислениях? - PullRequest
1 голос
/ 10 июня 2011

Я пытаюсь написать программу, которая читает 2 числа от пользователя и делит их.Вот код, который у меня есть:

import java.util.Scanner;

public class divideByZero {

public static int quotient(int numerator, int denominator)
{
   return numerator / denominator;
}

public static void main(String args[])
{
   Scanner scanner = new Scanner(System.in);

    System.out.print("Please enter the first number: ");

    int numerator = scanner.nextInt();

    System.out.print("Please enter the second number: ");

    int denominator = scanner.nextInt();

    int result = quotient( numerator, denominator );

    float result2 = (float)result;

    System.out.printf("\n The first number %d divided by the second number "
            + "%d = %f\n", numerator, denominator, result2 );

}

У меня проблемы с вычислениями.Например, когда я ввожу 3, деленное на 4, я получаю результат 0,000000.Как получить правильный результат с точностью до 2 знаков после запятой?

Ответы [ 5 ]

1 голос
/ 10 июня 2011

Следующие изменения сделают то, что вам нужно.

public static float quotient(int numerator, int denominator)
{
    return (float)numerator / (float)denominator;
}

float result = quotient( numerator, denominator );

System.out.printf("\n The first number %d divided by the second number "
        + "%d = %.2f\n", numerator, denominator, result2 );

Вы не можете делать деление на int и получать дробное int (такого нет), поэтому деление должно быть сделано с помощью float и сохранено в float.% .2f ограничивает его до 2 десятичных знаков.

1 голос
/ 10 июня 2011

Почему бы вам не использовать тип данных double вместо float?

Вот код для форматирования в две десятичные точки:

import java.text.*;

public class DecimalPlaces {

   public static void main(String[] args) {

       double d = 1.234567;
       DecimalFormat df = new DecimalFormat("#.##");
       System.out.print(df.format(d));
   }

}
1 голос
/ 10 июня 2011

Перед тем, как делить их, приведите числитель и знаменатель к числу с плавающей точкой.

import java.util.Scanner;

public class divideByZero {

public static float quotient(float numerator, float denominator)
{
   return numerator / denominator;
}

public static void main(String args[])
{
   Scanner scanner = new Scanner(System.in);

    System.out.print("Please enter the first number: ");

    int numerator = scanner.nextInt();

    System.out.print("Please enter the second number: ");

    int denominator = scanner.nextInt();

    float result = quotient( (float) numerator, (float) denominator );

    System.out.printf("\n The first number %d divided by the second number "
            + "%d = %f\n", numerator, denominator, result );

}
0 голосов
/ 10 июня 2011

Если вы измените тип возвращаемого значения частного метода с int на число с плавающей точкой, он больше не будет округлять ответ до ближайшего целого числа.

public static float quotient(int numerator, int denominator)
{
   return (float) numerator / (float) denominator;
}
0 голосов
/ 10 июня 2011

Вы получаете 0,0000, потому что вы делите целые числа и сохраняете результат обратно в целое число.Чтобы увидеть дробную часть, вы можете объявить результат как переменную с плавающей точкой.

Когда это работает, вы можете использовать 2 десятичных знака для форматирования printf.% .2f.

Исходя из ошибок, я думаю, что вам будет полезно прочитать о типах данных, особенно числах с плавающей запятой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...