2012-07-15 24 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