我一直在爲我母親寫一個小程序,在這個程序中,我必須根據他們要求她做的工作顯示價格清單。由於她需要價格中的所有小數,因此我將Excel上的單元格格式設置爲7位小數。問題是調試我的程序時,當我讀取一個價格的單元格時,它會在實際上未寫入單元格的數字之後添加幾個零。我無法理解發生了什麼,我正在使用OpenOffice將該文件保存爲Excel 97/2003文件,例如「listino.xls」。下面是我使用來獲取作品的名稱和價格代碼:excel閱讀中額外的小數位
public Lavorazione[] creaLavorazioni(Lavorazione[] lavorazioni){ //create Work
char[] stringa = new char[8];
double prezzo = 0;
String prezzostringa = "";
for(int righe=1;righe<workbookR.getSheet(0).getRows();righe++){ //until the rows of
//the excel table end
try{
lavorazioni[righe-1].setLavorazione(l.LeggiCella(listino, 0, righe));
stringa = l.LeggiCella(listino, 2, righe).toCharArray();
for(int i=0;i<stringa.length;i++){ //getting number and switching ","
//with "."
if(stringa[i]==',')
stringa[i]='.';
prezzostringa += stringa[i]; //Creating the price string
}
prezzostringa=prezzostringa.substring(0, 8); // deleting extra zeros, just
//in case
prezzo = Double.parseDouble(prezzostringa); //casting to double
lavorazioni[righe-1].setPrezzo(prezzo); //setting in lavorazioni.prezzo
}catch(Exception e){
System.out.println("è successo qualcosa in creaLavorazioni!");
}
prezzostringa=""; //resetting for the next cycle
}
return lavorazioni;
}
類Lavorazione
是我做的,它是這樣的:
public final class Lavorazione {
private String lavorazione; //name of the work to do
private double prezzo; //price of it
public Lavorazione(String lav, double costo){
this.setLavorazione(lav);
this.setPrezzo(costo);
}
public String getLavorazione() {
return lavorazione;
}
public void setLavorazione(String lavorazione) {
this.lavorazione = lavorazione;
}
public double getPrezzo() {
return prezzo;
}
public void setPrezzo(double prezzo) {
this.prezzo = prezzo;
}
所以它只是名稱工作和相對價格。簡而言之,當單元格中有「0,05423」時,它會寫入「0.05423000000000001」。任何人都可以幫我解釋一下嗎?使用java.util.Locale是一個好主意嗎?如果你需要更多的信息,請問我。
編輯:我正在使用jxl api。
您是否嘗試過使用BigDecimal而不是double? – CKing 2015-04-05 07:05:10
*「」0,05423「在單元格中,它寫入」0.05423000000000001「。」*似乎它需要['NumberFormat'](https://docs.oracle.com/javase/8/docs/api/java/ text/NumberFormat.html)作爲輸出。可能有關[每個計算機科學家應該知道的關於浮點運算的知識](http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html)。 – 2015-04-05 07:10:14
@bot我嘗試過使用BigDecimal,但它沒有解決問題,它只是讓它更難處理。 – ServantGrunt 2015-04-05 19:18:24