kod Java jest następujący:Jak zrobić Integer.parseInt() dla liczby dziesiętnej?
String s = "0.01";
int i = Integer.parseInt(s);
Jednak to jest rzucanie NumberFormatException ... Co może być nie tak?
kod Java jest następujący:Jak zrobić Integer.parseInt() dla liczby dziesiętnej?
String s = "0.01";
int i = Integer.parseInt(s);
Jednak to jest rzucanie NumberFormatException ... Co może być nie tak?
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
.
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ć.
Użyj wartości Double.parseDouble(String a)
, która nie jest liczbą całkowitą, ponieważ nie jest liczbą całkowitą.
użytkowania
String s="0.01";
int i= new Double(s).intValue();
String s="0.01";
int i = Double.valueOf(s).intValue();
wykorzystanie ten
int number = (int) Double.parseDouble(s);
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
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
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. –
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();
Twoja obsada całkowicie utraci informacje ułamkowe. Nie jestem pewien, czy to dobry pomysł, aby doradzić. – Joren
OK! może będę musiał zrobić coś takiego Double? = Double.parseDouble (s); dobrze? –
@Joren: Wiem, ale on chce Integer (jeśli sprawdzę jego kod) –