codice di Java è la seguente:Come eseguire un valore Integer.parseInt() per un numero decimale?
String s = "0.01";
int i = Integer.parseInt(s);
Tuttavia, questo sta gettando un NumberFormatException ... Che cosa potrebbe andare storto?
codice di Java è la seguente:Come eseguire un valore Integer.parseInt() per un numero decimale?
String s = "0.01";
int i = Integer.parseInt(s);
Tuttavia, questo sta gettando un NumberFormatException ... Che cosa potrebbe andare storto?
0.01 non è un numero intero (numero intero), quindi ovviamente non è possibile analizzarlo come uno. Utilizzare invece Double.parseDouble
o Float.parseFloat
.
String s = "0.01";
double d = Double.parseDouble(s);
int i = (int) d;
Il motivo dell'eccezione è che un numero intero non contiene numeri razionali (= fondamentalmente frazioni). Quindi, provare ad analizzare 0.3
su un numero intero non ha senso. A double
o un tipo di dati float
può contenere numeri razionali.
Il modo Java getta double
a un int
è fatto da rimuovendo la parte dopo il separatore decimale arrotondando verso zero.
int i = (int) 0.9999;
i
a zero.
Utilizzare Double.parseDouble(String a)
quello che stai cercando non è un numero intero in quanto non è un numero intero.
Usa,
String s="0.01";
int i= new Double(s).intValue();
String s="0.01";
int i = Double.valueOf(s).intValue();
uso questo
int number = (int) Double.parseDouble(s);
Questo tipo di conversione è in realtà sorprendentemente poco intuitivo in Java
Prendiamo ad esempio uno stringa seguente: " 100,00 "
C: una semplice funzione di libreria standard almeno dal 1971 (Where did the name `atoi` come from?)
int i = atoi(decimalstring);
Java: passaggio obbligato per doppia (o Float) analizzare, seguita da un cast
int i = (int)Double.parseDouble(decimalstring);
Java ha certe stranezze nella sua manica
C semplicemente ignora il resto della stringa e analizza tutto ciò che può analizzare (in questo caso, è '100').Non c'è modo per voi di sapere se 'atoi' ha effettivamente analizzato tutto nella stringa o meno, se la stringa contiene il numero o se il numero trabocca il tipo. 'strtol' è un'alternativa migliore in cui tutte le cose sopra possono essere rilevate. Java è più rigido, ma garantisce che tutti questi casi siano coperti. – nhahtdh
Sono d'accordo con Raywell perché funziona 'Double.valueOf (" 16543 "). IntValue();' Quindi Java vuole essere un PITA quando si desidera convertire rapidamente in int, tuttavia Double è molto più generale. –
Utilizzo di BigDecimal per arrotondare:
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();
Il cast perde completamente le informazioni frazionarie. Non sono sicuro che sia una buona idea da consigliare. – Joren
Ok! forse dovrò fare qualcosa di simile a questo Double d = Double.parseDouble (s); destra? –
@Joren: Lo so, ma vuole un intero (se controllo il suo codice) –