我tryng到华氏温度转换成摄氏correspective所以我写了:数学表达式,不以括号工作
double f = 90.0;
double c = (90.0-32)*(5/9); // 0.0
但是,这并不工作,更好的运气,如果我不使用第二套圆括号:
double c = (90.0-32)*5/9; // 32.2222
为什么这(至少对我来说)奇怪的行为?
我tryng到华氏温度转换成摄氏correspective所以我写了:数学表达式,不以括号工作
double f = 90.0;
double c = (90.0-32)*(5/9); // 0.0
但是,这并不工作,更好的运气,如果我不使用第二套圆括号:
double c = (90.0-32)*5/9; // 32.2222
为什么这(至少对我来说)奇怪的行为?
不要使用除法整数因为2/5 = 0
但2.0/5.0 = 0.4
你的问题是在这里
double c = (90.0-32)*(5/9);
5,9会导致零值的整数除法。变化5或9双重价值:
double c = (90.0-32)*(5.0/9);
当你把整数,结果将是一个整数,当然是一个整数无法存放结果的真实分数值,只有它的整数部分。
1?你的意思是0? – harold 2012-07-15 11:22:29
是的,当然 - 错字。感谢您指出 – mathematician1975 2012-07-15 11:22:42
(90.0-32)*5/9
被评估为((90.0-32)*5)/9
,请注意分割发生在double和int之间(然后隐式转换为double)。
(90.0-32)*(5/9)
有5/9
,它是零。
(5/9)将给予0,所以这样做(5.0/9.0)
第二个:
double c = (90.0-32)*5/9;
作品,因为在括号中的表达式是浮点数,你然后再乘以一个数字并除以最终结果保持一个浮点数。
尝试这种方式.....
这个例子说明,当x和y是整数返回值是0,但如果X和Y是双则其0.5555555555555556
public class Test{
public static void main(String[] args){
double x = 5.0;
double y = 9.0;
System.out.println((90.0-32.0)*(x/y));
}
}
您可以在初始化变量时尝试以下操作。
double f = 90D ;
float fl = 50F ;
因此,您不必每次都处理.0
的值。
在使用不同数据类型的数字表达式中,除非指定,否则默认选项为int
和double
。
在Primitive Data Types上阅读更多详细信息。
INT数据类型通常是默认选择,除非是有原因的。
对于十进制值,double数据类型一般是默认选择。
在您的表达:在表达(5/9)
double c = (90.0-32)*(5/9); // 0.0
5
和9
被视为int
数据类型和分裂因此 结果是0
,一个int
。(90.0-32)
将导致double
,因为32
是int
。 double */+/- int/long/float/double
将导致double
。 double divided_by_any int/long/float/double
将导致double
。牢记上述各点,对于c
表达可以解释为
double c = (double)*(int);
double c = (90.0-32)*(0);
double c = 0.0; // double
因此,对于c
的结果将是一个double
0.0
。
表达
double c = (90.0-32)*5/9; // 32.2222
被解释,基于operator precedence,如
double c = ((90.0-32)*5)/9; // ((double - int) * int)/int
//c = ((58.0)*5)/9; // ((double) * int)/int
//c = (290.0)/9; // (double)/int
c = 32.22222222222222; // double
或者,5
显式转换或9
在(5/9)
到double
将导致32.22222222222222
为c
。
//double c = (90.0-32)*(5/9);
double c = (90.0-32)*((double)5/9); // (double - int) * ((double)int/int)
// or
//double c = (90.0-32)*(5/(double)9); // (double - int) * (int/(double)int)
//c = (58.0)*(5.0/9); // ((double) * (double/int)
//c = (58.0)*(0.5555555555555556); // (double)*(double)
c = 32.22222222222222; // double
要了解更多关于明确的表达式和语句,还请参考:
Expressions, Statements, and Blocks
检查我的答案。 – 2012-07-15 13:47:46