我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