2016-02-19 35 views
-2
double multiply() 
{ 
double x=(2/3)*3.14*1.02; 
System.out.print(x); 

double y=0.666*3.14*1.02; /*(2/3)=0.666...*/ 
System.out.print(y); 
} 

输出: X = 0.0 Y = SomeNumber的java:乘以2个双打

请解释?

+4

你不熟悉这个笑话吗?你有6个程序员和5片蛋糕。每个程序员得到多少蛋糕? 0,当然。 – Neil

回答

0

2/3 = 0因为他们没有显式强制转换他们是整数。整个表达式变为:double x=0*3.14*1.02; ,其为0。

0

因为两者2及3的数据类型是int和INT/INT给你诠释而你的情况2/3为0 尝试使用2.0/3或2 /3.0你会得到所需的答案。

0

后缀以“d”每一个数字,以确保你正在处理双打

2
(2/3) is 0. 

因为两者都是整数。为了解决这个问题,使用强制或者说清楚,你的号码是不是整数:

double x=(2/3d)*3.14*1.02; 

现在你有一个双,从而导致双除以整数。

一些更可了解有关这一点: http://www.mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/mixed.html

+1

在这种情况下编写3f不是一个好主意,因为2/3f将被评估为'float',随着随后发生对'double'的提升,这会花费精度。 – Bathsheba

+0

谢谢,调整。 –

+1

*更好*更好。有一个upvote。 – Bathsheba

1

(2/3)计算第一(因为括号),和在整数运算(自号文字是int类型)。小数部分被丢弃。

因此它是一个值为0的int类型。因此整个表达式为零。

明显的补救措施是删除括号并写入2.0/3.0。有些人喜欢明确演员,但我觉得这很丑陋。