2009-09-20 16 views

Odpowiedz

48

0.01 nie jest liczbą całkowitą (liczbą całkowitą), więc oczywiście nie można go sparsować jako jeden. Zamiast tego użyj Double.parseDouble lub Float.parseFloat.

65
String s = "0.01"; 
double d = Double.parseDouble(s); 
int i = (int) d; 

Powodem wyjątku jest to, że liczba całkowita nie zawiera liczb wymiernych (= w zasadzie ułamki). Tak więc, próba parsowania 0.3 na int jest nonsensem. Typ danych double lub float może zawierać liczby wymierne.

Sposób Java rzuca double do int odbywa się poprzez usuwając część po separatorze dziesiętnym przez zaokrąglenie w kierunku zera.

int i = (int) 0.9999; 

i będzie zerować.

+2

Twoja obsada całkowicie utraci informacje ułamkowe. Nie jestem pewien, czy to dobry pomysł, aby doradzić. – Joren

+1

OK! może będę musiał zrobić coś takiego Double? = Double.parseDouble (s); dobrze? –

+1

@Joren: Wiem, ale on chce Integer (jeśli sprawdzę jego kod) –

2

Użyj wartości Double.parseDouble(String a), która nie jest liczbą całkowitą, ponieważ nie jest liczbą całkowitą.

18

użytkowania

String s="0.01"; 
int i= new Double(s).intValue(); 
11
String s="0.01"; 
int i = Double.valueOf(s).intValue(); 
2

wykorzystanie ten

int number = (int) Double.parseDouble(s);

7

Ten rodzaj konwersji jest rzeczywiście zaskakująco nieintuicyjne w Javie

Weźmy na przykład następujący ciąg: " 100,00 "

C: prosta funkcja standardowa biblioteka przynajmniej od 1971 (Where did the name `atoi` come from?)

int i = atoi(decimalstring); 

Java: obowiązkowe przejście przez podwójny (lub float) analizować, a następnie gipsie

int i = (int)Double.parseDouble(decimalstring); 

Java z pewnością ma pewne dziwactwa w górę w rękawie

+0

C po prostu zignoruj ​​resztę łańcucha i przeanalizuj wszystko, co może analizować (w tym przypadku jest to '100').Nie ma sposobu, abyś wiedział, czy 'atoi' faktycznie przetworzył wszystko w ciągu znaków, czy łańcuch zawiera liczbę czy też liczba przepełnia typ. 'strtol' jest lepszą alternatywą, gdzie można wykryć wszystkie powyższe rzeczy. Java jest bardziej rygorystyczna, ale zapewnia, że ​​wszystkie te sprawy są objęte gwarancją. – nhahtdh

+0

Zgadzam się z Raywell, ponieważ działa "Double.valueOf" ("16543"). IntValue(); "Tak więc Java chce być PITA, gdy chcesz szybko przekonwertować do int, ale Double jest o wiele bardziej ogólny. –

2

Używanie BigDecimal do zaokrąglenia:

String s1="0.01"; 
int i1 = new BigDecimal(s1).setScale(0, RoundingMode.HALF_UP).intValueExact(); 

String s2="0.5"; 
int i2 = new BigDecimal(s2).setScale(0, RoundingMode.HALF_UP).intValueExact(); 
Powiązane problemy