2013-05-17 26 views
2
public static void main(String[] args) { 
     double firstDouble = 1.8d; 
     double secondDouble = 1.65d; 


     float firstFloat = 1.8f; 
     float secondFloat = 1.65f; 
     System.out.println("DOUBLE SUM : "+(firstDouble + secondDouble)); 
     System.out.println("FLOAT SUM :"+(firstFloat + secondFloat)); 

     System.out.println("DOUBLE SUM"+firstDouble + secondDouble); 
     System.out.println("FLOAT SUM"+firstFloat + secondFloat); 
    } 

OUT PUT: 

DOUBLE SUM : 3.45 
FLOAT SUM :3.4499998 

DOUBLE SUM :1.81.65 
FLOAT SUM :1.81.65 

我的問題爲什麼在Java這裏不同的結果,長期和雙用相同的價值觀

1)在第一組出把它爲什麼對同一值 2)給予不同的價值觀3.453.4499998在第二組輸出中,爲什麼輸出與第一輸出不同。

在此先感謝...

+1

1)1.8D!= 1.8F和1.65d!= 1.65f如果是一樣的,你就不會需要不同的放'F'和'D'2)括號改變優先級,因爲該命令你評估事情的事情。 –

回答

1

System.out.println("DOUBLE SUM"+firstDouble + secondDouble);

這裏參數可爲String。加號/加號運算符作爲字符串concatition工作。支架具有更多的優先性,所以先評估。

第一個問題已經得到解答。 Please find here

+0

要理解@ Shubhrajyoti的答案,您應該瞭解運算符的優先級,您可以在這裏快速瀏覽一下:http://introcs.cs.princeton.edu/java/11precedence/ – zEro

+0

嗯,謝謝..... –

0

在你錯過了支架,它做別的事情與在System.out.println聲明「雙森」字符串和「浮動和」第二盤,所以用括號加上您的算術表達式來獲得正確的結果。

System.out.println("DOUBLE SUM : "+(firstDouble + secondDouble)); 
System.out.println("FLOAT SUM :"+(firstFloat + secondFloat)); 

System.out.println("DOUBLE SUM"+ (firstDouble + secondDouble)); 
System.out.println("FLOAT SUM"+(firstFloat + secondFloat)); 

這給出

DOUBLE SUM 3.45 
FLOAT SUM 3.4499998 
DOUBLE SUM 3.45 
FLOAT SUM 3.4499998 
+0

我知道。那裏發生了什麼。 – PSR

+0

當我刪除括號,對我來說,它只給出了這樣的連接'DOUBLE SUM1.81.65 FLOAT SUM1.81.65' – Sridhar

+0

@PSR沒有括號它被解釋爲'(「DOUBLE SUM」+ firstDouble)+ secondDouble「',這是兩個字符串連接,根本不需要浮點數 – EJP

0

這是非常有用的:http://floating-point-gui.de/languages/java/

對於一個簡短的回答,請儘量使用BigDecimal當你正在處理浮點。

BigDecimal a = new BigDecimal("1.8"); 
BigDecimal b = new BigDecimal("1.65"); 
BigDecimal c = a.add(b); // returns a BigDecimal representing exactly 3.45 
+0

如果十進制小數部分非常重要,例如在金融交易中,BigDecimal是一種很好的數據類型,但在其他情況下(如科學計算)沒有特別的優點,其中十特殊的,往往效率低,比雙倍便捷。 –

相關問題