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