2016-03-04 68 views
-1

问题要求我写一个Java程序,以显示下面的转换运算符表达式的结果:的Java铸造(铸运营商则表达式)

(双)(23/14)+ 7.65

我的代码:

public class op { 
public static void main(String [] args) { 
int num = 23/14; 
double r1 = (double) num; 
double result = r1 + 7.65; 
System.out.println("Results: "+ result); 
    } 
} 

我不认为我做得正确,我的代码有什么问题? 顺便说一下,有人能告诉我长,双,int,float之间有什么区别吗?我们如何知道何时使用这些基本数据类型?我在这里读到一个解释:https://docs.oracle.com/javase/tutorial/java/nutsandbolts/datatypes.html 但是有没有解释的“人类版本”?

谢谢你的帮助。

+0

什么是您预期的结果? 9.9298 ...或8.65? – Endery

+0

我认为答案应该是9.9298 ...但我的输出是8.65 –

回答

1

让我们来看看一步一步:

int num = 23/14; // int division of 23/14 results in 1 

所以,在这里NUM = 1

当你施放numdoubler1被设置好的给1.0

double result = r1 + 7.65; //1.0 + 7.65 = 8.65 
1

OK,INT是整数,是我们通常使用的自然数,但不带小数位和短期如果您的号码在大约十亿之间在-2到+2十亿一定的价值。如果你的范围超出了这个范围,你仍然想要一个整数,那么就选择长数据类型。

花车与一系列的+ 10 * 38 * -10 38左右,但如果你的射程超过这个(实际上这种情况很少见)去双十进制值一样3.147。

来到你放在这里的代码,如果你用另一个int(比如23/14)除以一个int,你只会得到答案的整数部分(23/14中只有'1'= 1.642 ... ),接下来当你施放它翻一番你得到1.0和明年你打算将它添加到7.65,这将使最终的答案为8.65希望这回答您的问与答....

+0

我想我明白了,谢谢! –

2

的问题是由于使用类型。

由于你把两个整数(23和14),结果被认为是和int为好。因此,23/14 = 1.642857142857143,它被截断以适合int结果,更具体地说,1. 结果是1(int)和7.65(double)的和。由于其中一个是双精度,所以其他精度也转换为“上”精度(双精度),运算变为1.0 + 7.65 = 8.65。

结果是正确的,因为你问的(双)(23/14)+ 7.65的结果,这意味着铸造操作的结果括号的结果是双7.65相加。如前所述,这是8.65。

如果你想用用双打部门,可以考虑:

double r1 = 1.0 * 23/14; 
+0

只要再次确定,所以结果应该是8.65但不是9.2928 ....? –

+0

这一切都是你解释初始请求的方式。如果请求应该用java编写,那么结果应该是8.65,因为int分割是在投射之前完成的。如果是以自然语言给出的话,它可能会把分数称为双打,在这种情况下结果应该是9.29 ... –

+1

实际上,你可以做到这一点:'double r1 = 23/14.0' –

0

你可以改变这个int num = 23/14

double num = ((double) 23)/14

double num = (23 * 1.0)/14