2015-10-04 146 views
0

我需要一些幫助,這是我指的是代碼:雙精度

int myId; 
my Id = 20113275l 
int numLet; 
numLet = 6; 
double doubleResult; 
doubleResult = 10000 + (80 + ((myId - 123456)/((numLet + 20)*(numLet + 20))  )); 
System.out.println("Expression 5: " + doubleResult); 

根據我的計算,答案應該是39650.7,但是當我運行程序它給我39650.0

任何人都可以解釋這裏發生了什麼?

+0

添加的語言標記。是的,它顯然是一個Java,但只是爲了確保。 –

+1

嘗試'doubleResult =(double)(10000 +(80 +((myId - 123456)/((numLet + 20)*(numLet + 20)))' –

+3

表達式中的所有內容都以整數表示,規則。因此,除法是一個整數除法,這是截斷。 –

回答

0

你應該使用double值只得到想要的結果,在這種情況下:

int myId; 
myId = 20113275; 
int numLet; 

變爲

double myId = 20113275.0; 
double numLet; 

這裏是輸出:

Expression 5: 39650.73816568047 
+0

@JamesKPolk你說得對,我沒有看到最後的「l」,因此是誤導 –

0

你得到整數除法,因爲你的參數都不是double。劃分兩個整數的結果是一個整數。而你的類型是int(最後增加一個l促銷到long)。無論如何,將其中一個條款投到double,你會得到你期望的結果。對於精度的一位小數,您可以使用格式化輸出。喜歡的東西,

public static void main(String[] args) { 
    int myId = 20113275; // <--- Not a long. 
    int numLet = 6; 
    double doubleResult = 10000 + // 
     (80 + ((myId - 123456)/(double) ((numLet + 20) * (numLet + 20)))); 
    System.out.printf("Expression 5: %.1f%n", doubleResult); 
} 

輸出是(按照您的要求)

Expression 5: 39650.7