2009-09-20 14 views

risposta

48

0.01 non è un numero intero (numero intero), quindi ovviamente non è possibile analizzarlo come uno. Utilizzare invece Double.parseDouble o Float.parseFloat.

65
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.

+2

Il cast perde completamente le informazioni frazionarie. Non sono sicuro che sia una buona idea da consigliare. – Joren

+1

Ok! forse dovrò fare qualcosa di simile a questo Double d = Double.parseDouble (s); destra? –

+1

@Joren: Lo so, ma vuole un intero (se controllo il suo codice) –

2

Utilizzare Double.parseDouble(String a) quello che stai cercando non è un numero intero in quanto non è un numero intero.

18

Usa,

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

uso questo

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

7

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

+0

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

+0

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. –

2

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(); 
Problemi correlati