Come fare un Integer.parseInt () per un numero decimale?

Il codice Java è il seguente:

String s = "0.01"; int i = Integer.parseInt(s); 

Tuttavia questo sta lanciando una NumberFormatException … Cosa potrebbe andare storto?

0.01 non è un numero intero (numero intero), quindi ovviamente non è ansible analizzarlo come uno. Utilizza invece Float.parseFloat 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 a un int è una sciocchezza. Un tipo di dati double o float può contenere numeri razionali.

Il modo in cui Java esegue il double di un int viene eseguito rimuovendo la parte dopo il separatore decimale arrotondando verso zero .

 int i = (int) 0.9999; 

i farò da zero.

Uso,

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

Questo tipo di conversione è sorprendentemente poco intuitivo in Java

Prendi ad esempio una stringa seguente: “100.00”

C: una semplice funzione di libreria standard almeno dal 1971 (da dove viene il nome `atoi`? )

 int i = atoi(decimalstring); 

Java: passaggio obbligatorio da analisi Double (o Float), seguito da un cast

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

Java ha sicuramente alcune stranezze nella manica

Usare 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(); 

supponiamo di prendere un intero in stringa.

String s = “100”; int i = Integer.parseInt (s); o int i = Integer.valueOf (s);

ma nella tua domanda il numero che stai cercando di fare è il numero intero

String s = “10.00”;

double d = Double.parseDouble (s);

int i = (int) d;

In questo modo ottieni la risposta del valore che stai cercando di ottenere.

usa questo

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

Usa Double.parseDouble(String a) ciò che stai cercando non è un numero intero poiché non è un numero intero.