Le code Java est comme suit:Comment faire un Integer.parseInt() pour un nombre décimal?
String s = "0.01";
int i = Integer.parseInt(s);
Toutefois, ce jette un NumberFormatException ... Que pourrait-on ne va pas?
Le code Java est comme suit:Comment faire un Integer.parseInt() pour un nombre décimal?
String s = "0.01";
int i = Integer.parseInt(s);
Toutefois, ce jette un NumberFormatException ... Que pourrait-on ne va pas?
0.01 n'est pas un entier (nombre entier), donc vous ne pouvez bien sûr pas l'analyser comme un seul. Utilisez Double.parseDouble
ou Float.parseFloat
à la place.
String s = "0.01";
double d = Double.parseDouble(s);
int i = (int) d;
La raison de l'exception est qu'un entier ne contient pas de nombres rationnels (= essentiellement des fractions). Donc, essayer d'analyser 0.3
à un int est un non-sens. Un double
ou un type de données float
peut contenir des nombres rationnels.
La façon dont Java jette un double
à un int
se fait par enlever la partie après le séparateur décimal en arrondi vers zéro.
int i = (int) 0.9999;
i
sera par zéro.
Utilisez Double.parseDouble(String a)
ce que vous recherchez n'est pas un nombre entier car ce n'est pas un nombre entier.
Utilisation,
String s="0.01";
int i= new Double(s).intValue();
String s="0.01";
int i = Double.valueOf(s).intValue();
utiliser celui-ci
int number = (int) Double.parseDouble(s);
Ce type de conversion est en fait suprisingly unintuitive en Java
Prenez par exemple une chaîne de caractères suivante: " 100.00 "
C: une simple fonction de bibliothèque standard au moins depuis 1971 (Where did the name `atoi` come from?)
int i = atoi(decimalstring);
Java: passage obligatoire par double (ou flotteur) analyser, suivie par un casting
int i = (int)Double.parseDouble(decimalstring);
Java a certainement des bizarreries dans sa manche
C ignore simplement le reste de la chaîne, et analyse tout ce qu'elle peut analyser (dans ce cas, c'est '100').Il n'y a aucun moyen pour vous de savoir si 'atoi' a réellement analysé tout dans la chaîne ou non, si la chaîne contient un nombre ou si le nombre déborde le type. 'strtol' est une meilleure alternative où toutes les choses ci-dessus peuvent être détectées. Java est plus strict, mais il s'assure que tous ces cas sont couverts. – nhahtdh
Je suis d'accord avec Raywell parce que cela fonctionne 'Double.valueOf (" 16543 "). IntValue();' Donc Java veut être un PITA quand vous voulez convertir rapidement en int, et pourtant Double est beaucoup plus général. –
Utilisation de 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();
Votre distribution perdra complètement les informations fractionnaires. Je ne suis pas sûr que ce soit une bonne idée de conseiller. – Joren
Ok! peut-être que je devrai faire quelque chose comme ça Double d = Double.parseDouble (s); droite? –
@Joren: Je sais, mais il veut un nombre entier (si je vérifie son code) –