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个双打
请解释?
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个双打
请解释?
2/3 = 0
因为他们没有显式强制转换他们是整数。整个表达式变为:double x=0*3.14*1.02;
,其为0。
因为两者2及3的数据类型是int和INT/INT给你诠释而你的情况2/3为0 尝试使用2.0/3或2 /3.0你会得到所需的答案。
后缀以“d”每一个数字,以确保你正在处理双打
(2/3) is 0.
因为两者都是整数。为了解决这个问题,使用强制或者说清楚,你的号码是不是整数:
double x=(2/3d)*3.14*1.02;
现在你有一个双,从而导致双除以整数。
一些更可了解有关这一点: http://www.mathcs.emory.edu/~cheung/Courses/170/Syllabus/04/mixed.html
(2/3)
计算第一(因为括号),和在整数运算(自号文字是int
类型)。小数部分被丢弃。
因此它是一个值为0的int
类型。因此整个表达式为零。
明显的补救措施是删除括号并写入2.0/3.0。有些人喜欢明确演员,但我觉得这很丑陋。
你不熟悉这个笑话吗?你有6个程序员和5片蛋糕。每个程序员得到多少蛋糕? 0,当然。 – Neil