2012-11-26 14 views
5

Próbuję odczytać wartości z arkusza programu Excel za pomocą języka Java. Kiedy wpisuję więcej niż 10 liter w komórce w programie Excel, wyświetla się ona w formie wykładniczej, takiej jak "9.78313E + 2". ale to nie jest prawdziwa liczba, którą dałem. Czy jakiekolwiek ciało może mi w tym pomóc? Jak mogę przekonwertować powyższy formularz wykładniczy na oryginalny numer za pomocą języka Java.Konwersja wartości wykładniczej w java do formatu liczbowego

góry dzięki

+1

powinien pokazać nam numer masz w Excel i wynik w Javie. – looper

+1

'9.78313E + 2' =' 978.313' Czy wprowadzasz mylące wartości do formatu. 'double' nie zachowuje formatu tylko wartość. –

Odpowiedz

9
Double.parseDouble("9.78313E+2"); 

daje mi

978.313 

Więcej informacji można znaleźć the doc.

obserwuję swoje dalsze pytania poniżej, jeśli wpiszesz 4256411411 Excel i prezentuje to jako 4.26E+09, stawiając tę ​​wartość do parseDouble() tylko daje 4260000000. Jeśli chcesz oryginał, być może musisz wypisać plik Excel w pełniejszym formacie dla twojego programu Java i/lub przesłać go za pomocą interfejsu API Java/Excel (np. POI)

+0

tak. daje, ale to nie jest oryginalny numer, który podałem w arkuszu excel – user1853173

+0

Próbowałem ten z BigDecimal również. Podaje również tę samą odpowiedź: – user1853173

+0

Czy możesz nam pokazać, jaka jest dokładna liczba? Czy pobierasz numer z arkusza Excela w kodzie Java? –

2

Możesz użyć BigDecimal, jeśli chcesz dokładna wartość, że masz w Excel Sheet: -

BigDecimal bd = new BigDecimal("4256411411"); 
System.out.println(bd.doubleValue()); 

// If you are sure that's not a floating point number, then use 
System.out.println(bd.longValue()); 

Wydruki: -

4.256411411E9 
4256411411 
+0

Dane wejściowe z arkusza excel otrzymuję w formie wykładniczej – user1853173

+0

@ user1853173. Nie możesz pobrać wartości w postaci ciągu i po prostu przekonwertować ją na "BigDecimal"? –

+0

@ user1853173 .. Nie przechowuj pobranej wartości w "podwójnym" typie. Ale w typie String. –

0

można łatwo przekonwertować z następujących metod:

Double.valueOf("9.78313E+2").longValue() lub

BigDecimal bd = new BigDecimal("9.78313E+2"); 
long val = bd.longValue(); 

Zakładając, że dany numer jest w postaci String.

+1

Powyższy kod daje wynik jako 4260000000. ale nie jest to oryginalna wartość dla 4,26E + 09. – user1853173

3

Zanim przeczytasz wartość z arkusza Excela, sformatuj kolumnę na numer.

This może być pomaga Ci

AKTUALIZACJA

HSSFCell cellE1 = row1.getCell((short) 4); 
cellE1.setCellType(HSSFCell.CELL_TYPE_NUMERIC); 
Double e1Val = cellE1.getNumericCellValue(); 
BigDecimal bd = new BigDecimal(e1Val.toString()); 
long lonVal = bd.longValue(); 
System.out.println(lonVal); 
+0

Powinieneś zrobić to pragmatycznie. Przed odczytaniem program powinien zmienić go na typ numeru. Co to jest interfejs API do czytania Excel? – Suranga

+0

W języku Java przed odczytaniem wartości z programu Excel muszę zmienić format komórki na liczbę? – user1853173

+0

Jaki jest twój interfejs API do czytania Excel? – Suranga

3

można przekształcić w następujący sposób, na przykład: . nowych BigDecimal ("406770000244E + 12") toBigInteger();

0

Niestety, ale żadna z powyższych odpowiedzi Double.parseDouble() i Double.valueOf() ... rozwiązać mój problem, a ja nadal uzyskać wykładniczy wartości „e” ...

This związek ma znacznie lepsze podejście do problemu , i jak już tam napisałem - istnieje bardzo dobre rozwiązanie:

Potrzebowałem przekonwertować niektóre podwójne do wartości walutowych i fount, że większość do rozwiązania są OK, ale nie dla mnie.

DecimalFormat był ostatecznie droga dla mnie, więc o to, co zrobiłem:

public String foo(double value) //Got here 6.743240136E7 or something.. 
    { 
     DecimalFormat formatter; 

     if(value - (int)value > 0.0) 
      formatter = new DecimalFormat("0.00"); //Here you can also deal with rounding if you wish.. 
     else 
      formatter = new DecimalFormat("0"); 

     return formatter.format(value); 
    } 

Jak widać, jeśli liczba jest naturalna otrzymuję - powiedzmy - 20000000 zamiast 2E7 (etc) - bez kropki dziesiętnej.

a jeśli jest dziesiętny, otrzymuję tylko 2 cyfry dziesiętne.

Mam nadzieję, że to pomoże.

0

Konwertuj komórkę na format liczbowy przed odczytaniem wartości komórki. Poniżej znajduje się fragment kodu, który jest używany, aby uzyskać rzeczywistą wartość, która jest w formacie wykładniczym:

nextCell.setCellType(XSSFCell.CELL_TYPE_NUMERIC); 
Double doubleValue = nextCell.getNumericCellValue(); 
BigDecimal bd = new BigDecimal(doubleValue.toString()); 
long lonVal = bd.longValue(); 
String phoneNumber = Long.toString(lonVal).trim(); 
System.out.print("PhoneNumber " + phoneNumber); 

Blog został wirtten aby pokazać rzeczywisty wynik.

Pozdrawiam, Ankur

0

Można również użyć klasy otoki:

Double bd=new Double(4445566622); 
System.out.println(bd.longValue()); 

Wyjścia -4445566622