Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/reporting-services/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用于浮点除法的Java显式类型转换_Java_Floating Point - Fatal编程技术网

用于浮点除法的Java显式类型转换

用于浮点除法的Java显式类型转换,java,floating-point,Java,Floating Point,我不确定是否在选项4(除法)中为浮点除法使用显式类型转换。我需要一些帮助来理解什么是浮点除法 我必须使用整数来存储2个操作数,使用双精度来存储结果。选项4中的浮点除法必须使用显式类型转换。还可以使用switch语句处理菜单选项。每次计算后 import java.util.Scanner; public class SimpleCalculator { //-----------------------------------------------------------------

我不确定是否在选项4(除法)中为浮点除法使用显式类型转换。我需要一些帮助来理解什么是浮点除法

我必须使用整数来存储2个操作数,使用双精度来存储结果。选项4中的浮点除法必须使用显式类型转换。还可以使用switch语句处理菜单选项。每次计算后

import java.util.Scanner;

public class SimpleCalculator
{
   //-----------------------------------------------------------------
   //  Calculates two integers 
   //  using values entered by the user.
   //-----------------------------------------------------------------
    public static void main(String[] args) 
    {
        //Variables
        final int ADDITION = 1,SUBTRACTION = 2, MULTIPLICATION = 3,DIVISION = 4, EXIT = 5;
        int num1 = 0, num2 = 0, choice = 0;
        double dblNum1, dblNum2, result;
        String equation = "";

        do
        {
            //Processing
            equation = "";
            Scanner scan = new Scanner(System.in);
            System.out.println("Choose from the following: ");
            System.out.println("1. Add 2 integers");
            System.out.println("2. Subtract 2 integers");
            System.out.println("3. Multiply 2 integers");
            System.out.println("4. Divide 2 integers");
            System.out.println("5. Exit");
            System.out.print("Enter choice: ");

            choice = scan.nextInt();

                if(choice < 5 && choice > 0)//keeps program from asking for two numbers if exiting
                {
                    System.out.print("Enter first integer: ");
                    num1 = scan.nextInt();

                    System.out.print("Enter second integer: ");
                    num2 = scan.nextInt();
                }

            //switch for operations
            switch (choice)
            {
                case ADDITION:
                    result = num1 + num2;
                    equation = ((num1) + " + " + (num2) + " = "+ result);
                    break;

                case SUBTRACTION:
                    result = num1 - num2;
                    equation = ((num1) + " - " + (num2) + " = "+ result);
                    break;

                case MULTIPLICATION:
                    result = num1 * num2;
                    equation = ((num1) + " * " + (num2) + " = "+ result);
                    break;

                case DIVISION:
                    if(num2 == 0)//when denominator becomes zero
                    {
                        System.out.println("DIVISION NOT POSSIBLE");
                        break;
                    }
                    dblNum1 = num1;//convert int to double
                    dblNum2 = num2;
                    result = dblNum1/dblNum2;
                    equation = ((num1) + "/" + (num2) + " = "+ result);
                    break;

                case EXIT:
                    System.exit(0);
                    break;

                default:
                    System.out.println("YOU HAVE ENTERED AN INCORRECT CHOICE");             
            }
            //Output
            System.out.println(equation);
            System.out.println();
        }while(choice != EXIT);
    }
}
import java.util.Scanner;
公共类简单计算器
{
//-----------------------------------------------------------------
//计算两个整数
//使用用户输入的值。
//-----------------------------------------------------------------
公共静态void main(字符串[]args)
{
//变数
最后的整数加法=1,减法=2,乘法=3,除法=4,退出=5;
int num1=0,num2=0,choice=0;
双dblNum1,dblNum2,结果;
弦方程=”;
做
{
//加工
方程=”;
扫描仪扫描=新扫描仪(System.in);
System.out.println(“从以下选项中选择:”);
System.out.println(“1.加2个整数”);
System.out.println(“2.减去2个整数”);
System.out.println(“3.乘以2个整数”);
System.out.println(“4.除2个整数”);
System.out.println(“5.Exit”);
System.out.print(“输入选项:”);
choice=scan.nextInt();
if(choice<5&&choice>0)//阻止程序在退出时请求两个数字
{
System.out.print(“输入第一个整数:”);
num1=scan.nextInt();
System.out.print(“输入第二个整数:”);
num2=scan.nextInt();
}
//操作开关
开关(选择)
{
案例补充:
结果=num1+num2;
方程=((num1)+“+”+(num2)+“=”+结果);
打破
案例减法:
结果=num1-num2;
方程=((num1)+“-”(num2)+“=”+结果);
打破
大小写乘法:
结果=num1*num2;
方程=((num1)+“*”+(num2)+“=”+结果);
打破
案件司:
if(num2==0)//分母为零时
{
System.out.println(“不可能分割”);
打破
}
dblNum1=num1;//将int转换为double
dblNum2=num2;
结果=dblNum1/dblNum2;
方程=((num1)+“/”+(num2)+“=”+结果);
打破
案件出口:
系统出口(0);
打破
违约:
System.out.println(“您输入了错误的选择”);
}
//输出
系统输出println(方程);
System.out.println();
}while(选择!=退出);
}
}

不,这不是明确的类型转换。您可能希望使用以下内容:

result = ((double) num1) / ((double) num2);
事实上,由于
/
操作符的扩展规则,您只需要其中一个显式强制转换,但两者兼有并没有坏处。事实上,由于强制转换运算符
()
的优先级高于除法运算符
/
,因此可以将其编写为:

result = (double) num1 / num2;

它结合了分子的显式转换和分母的隐式转换。

不,这不是显式类型转换。您可能希望使用以下内容:

result = ((double) num1) / ((double) num2);
事实上,由于
/
操作符的扩展规则,您只需要其中一个显式强制转换,但两者兼有并没有坏处。事实上,由于强制转换运算符
()
的优先级高于除法运算符
/
,因此可以将其编写为:

result = (double) num1 / num2;

它结合了分子的显式转换和分母的隐式转换。

显式类型转换是指告诉编译器表达式结果的类型。通常不需要键入cast,因为表达式的结果已经已知

例如:

int a = 1, b = 2;
int c = a + b; // The "type" of a + b is int. No explicit cast.
但我们可以明确地将该表达式转换为另一种类型:

int a = Integer.MAX_VALUE, b = 2;
double c = (double) a + (double) b; // Explicitly cast to avoid integer overflow.
第二个版本告诉编译器将
a
b
转换为双精度,然后将它们相加。此表达式的结果也将是double类型


正如@Ted Hopp所说,您不需要像这样显式地强制转换两个操作数。在这种情况下,强制转换
a
b
将具有相同的效果。

显式类型强制转换是在告诉编译器表达式结果的类型时进行的。通常不需要键入cast,因为表达式的结果已经已知

例如:

int a = 1, b = 2;
int c = a + b; // The "type" of a + b is int. No explicit cast.
但我们可以明确地将该表达式转换为另一种类型:

int a = Integer.MAX_VALUE, b = 2;
double c = (double) a + (double) b; // Explicitly cast to avoid integer overflow.
第二个版本告诉编译器将
a
b
转换为双精度,然后将它们相加。此表达式的结果也将是double类型


正如@Ted Hopp所说,您不需要像这样显式地强制转换两个操作数。在这种情况下,对
a
b
进行强制转换将产生相同的效果。

(双精度)是否使其明确?因为它正在从int转换为double(或重新定义它的类型)?@JamesParker-没有显式类型转换的标准Java定义,但这无疑意味着必须有一个,这涉及到使用cast操作符
()
。这现在更有意义了。谢谢你,Hopp先生(double)使它显式了吗?B