2017-06-14 59 views
0

我有這樣的代碼:錯誤解析雙java的

public void refreshResources(){ 
    try{ 
     String res = driver.findElement(By.cssSelector("#resources_metal")).getText(); 
     System.out.println("Metal read: " + res); 
     res = res.replaceAll("\\u002e", ""); //Removes dots 
     System.out.println("Metal without dots: " + res); 
     this.metRes = Double.parseDouble(res); 
     System.out.println("Converted Metal: " + metRes); 
    }catch(NoSuchElementException error){ 
     System.out.println("Error please try again"); 
    } 

這是我的輸出:

金屬閱讀:47.386.578

金屬沒有點:47386578

轉換金屬: 4.7386578E7

問題是,爲什麼我的轉換結束時會出現「E7」金屬? 在此先感謝。

+0

假設你參考這個[文章](https://stackoverflow.com/questions/6171823/how-can-i-change-2-5e7-to-a-normally-formatted-number)。 –

+0

雙精度不具有無限精度。這是你在科學記數法中的價值。 –

+0

這會給你很多關於「爲什麼」問題的背景:https://stackoverflow.com/questions/3730019/why-not-use-double-or-float-to-represent-currency –

回答

2

「Ex」其中「x」是數字,表示指數。所以在你的情況下,數字「4.7386578E7」將是「47386578」。只要把點7個地方。

不過,如果你想與沒有指數形式打印號碼,就可以在最後印刷使用的「printf」,就像下面的代碼:

public void refreshResources(){ 
try{ 
    String res = driver.findElement(By.cssSelector("#resources_metal")).getText(); 
    System.out.println("Metal read: " + res); 
    res = res.replaceAll("\\u002e", ""); //Removes dots 
    System.out.println("Metal without dots: " + res); 
    this.metRes = Double.parseDouble(res); 
    System.out.printf("Converted Metal: %.0f", metRes); 
}catch(NoSuchElementException error){ 
    System.out.println("Error please try again"); 
} 

到%.0f意味着要打印沒有小數部分的浮點值。

我希望這個答案能幫助你。

0

代替原始double或float使用「java.math」包中的「BigDecimal」。這會給你更精確的輸出。請參閱下面使用的代碼段。

try{ 
    String res = driver.findElement(By.cssSelector("#resources_metal")).getText(); 
    System.out.println("Metal read: " + res); 
    res = res.replaceAll("\\u002e", ""); //Removes dots 
    System.out.println("Metal without dots: " + res); 
    this.metRes = Double.parseDouble(res); 
    System.out.printf("Converted Metal: %.0f", metRes); 
    BigDecimal bigDecimal = new BigDecimal(res); 
    System.out.println("Big Decimal : "+bigDecimal); 
}catch(NoSuchElementException error){ 
    System.out.println("Error please try again"); 
}