2012-07-15 25 views
2

我tryng到华氏温度转换成摄氏correspective所以我写了:数学表达式,不以括号工作

double f = 90.0; 
double c = (90.0-32)*(5/9); // 0.0 

但是,这并不工作,更好的运气,如果我不使用第二套圆括号:

double c = (90.0-32)*5/9; // 32.2222 

为什么这(至少对我来说)奇怪的行为?

+0

检查我的答案。 – 2012-07-15 13:47:46

回答

3

不要使用除法整数因为2/5 = 02.0/5.0 = 0.4

2

你的问题是在这里

double c = (90.0-32)*(5/9); 

5,9会导致零值的整数除法。变化5或9双重价值:

double c = (90.0-32)*(5.0/9); 

当你把整数,结果将是一个整数,当然是一个整数无法存放结果的真实分数值,只有它的整数部分。

+0

1?你的意思是0? – harold 2012-07-15 11:22:29

+0

是的,当然 - 错字。感谢您指出 – mathematician1975 2012-07-15 11:22:42

2

(90.0-32)*5/9被评估为((90.0-32)*5)/9,请注意分割发生在double和int之间(然后隐式转换为double)。

(90.0-32)*(5/9)5/9,它是零。

2

(5/9)将给予0,所以这样做(5.0/9.0)

第二个:

double c = (90.0-32)*5/9; 

作品,因为在括号中的表达式是浮点数,你然后再乘以一个数字并除以最终结果保持一个浮点数。

2

尝试这种方式.....

这个例子说明,当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)); 
    } 

} 
2

您可以在初始化变量时尝试以下操作。

double f = 90D ; 
float fl = 50F ; 

因此,您不必每次都处理.0的值。

1

在使用不同数据类型的数字表达式中,除非指定,否则默认选项为intdouble

Primitive Data Types上阅读更多详细信息。

  1. INT数据类型通常是默认选择,除非是有原因的

  2. 对于十进制值,double数据类型一般是默认选择。

在您的表达:在表达(5/9)

double c = (90.0-32)*(5/9); // 0.0 
  1. 59被视为int数据类型和分裂因此 结果是0,一个int
  2. 表达(90.0-32)将导致double,因为32int
    您可知道,
    2.1。 double */+/- int/long/float/double将导致double
    2.2。 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的结果将是一个double0.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.22222222222222c

//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