Java 如何修复计算错误?

Java 如何修复计算错误?,java,computation,Java,Computation,我正试图编写一个程序,从用户那里读取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 s

我正试图编写一个程序,从用户那里读取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位?

将分子和分母转换为浮点数,然后再进行除法

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.0000,因为您将整数除法并将结果存储回整数。要查看小数部分,可以将结果声明为浮点变量

当这起作用时,要打印2个小数,可以使用printf格式

在C中,它类似于%.2f


基于这些错误,我认为阅读数据类型,特别是浮点数,会对您有所裨益。

如果您将商数方法的返回类型从int改为float,它将不再将答案四舍五入到最接近的整数

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

为什么不使用数据类型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));
   }

}

以下更改将满足您的需要

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 );

您不能对整型进行除法并得到分数整型(不存在这种情况),因此除法必须使用浮点数并存储到浮点数中。.2f将其限制为小数点后2位。

如果需要浮点输出,只需使用Scanner.nextFloat()而不是nextFloat(),并将所有数据存储为浮点,可能会更容易。正如Novazero所说,它可能会使用
double
。可能因为他可能不会超过双精度限制,浮点占用更多内存空间,但是他在他的帖子中使用了float,所以我也使用了float。哎呀,再多的施法都不会改善
商的
int
返回值(应该是
float商(float分子,float分母)
)。此外,int参数的强制转换是不必要的。啊,错过了函数中的int。另外,Java在默认情况下强制转换参数?实际上,您可能无法隐式地将
int
强制转换为
float
,因为这是一个缩小的强制转换。。。但是
int
应该转换为
double
很好,我已经指出了这一点。