web-dev-qa-db-fra.com

Comment faire un Integer.parseInt () pour un nombre décimal?

Le code Java est le suivant:

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

Cependant, une exception NumberFormatException est lancée ... Qu'est-ce qui pourrait mal se passer?

65
Kevin Boyd

0.01 n'est pas un entier (nombre entier), vous ne pouvez donc bien sûr pas l'analyser comme un entier. Utilisation Double.parseDouble ou Float.parseFloat au lieu.

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

La raison de cette exception est qu'un entier ne contient pas de nombres rationnels (= essentiellement des fractions). Donc, en essayant d'analyser 0.3 à un int est un non-sens. Un type de données double ou float peut contenir des nombres rationnels.

Le chemin Java convertit un double en un int est effectué par en supprimant la partie après le séparateur décimal en arrondissant à zéro.

int i = (int) 0.9999;

i sera à zéro.

84
Martijn Courteaux

Utilisation,

String s="0.01";
int i= new Double(s).intValue();
25
adatapost
String s="0.01";
int i = Double.valueOf(s).intValue();
16
Swapnil

Ce type de conversion est étonnamment peu intuitif en Java

Prenons par exemple une chaîne suivante: "100.00"

C: une fonction de bibliothèque standard simple au moins depuis 1971 ( D'où vient le nom `atoi`?? )

int i = atoi(decimalstring);

Java: passage obligatoire par double (ou float), suivi d'un cast

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

Java a certainement des bizarreries dans sa manche

9
Raywell

Utiliser BigDecimal pour arrondir:

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();
4
AnnTea

supposons que nous prenions un entier dans la chaîne.

Chaîne s = "100"; int i = Integer.parseInt (s); ou int i = Integer.valueOf (s);

mais dans votre question le nombre que vous essayez de faire le changement est le nombre entier

String s = "10.00";

double d = Double.parseDouble (s);

int i = (int) d;

De cette façon, vous obtenez la réponse à la valeur que vous essayez de l’obtenir.

3
ayushs27

Utilisez Double.parseDouble(String a) ce que vous recherchez n'est pas un entier puisqu'il ne s'agit pas d'un nombre entier.

2
dominic

utiliser celui-ci

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

2
Kevin Tan