código de Java es el siguiente:¿Cómo hacer un Integer.parseInt() para un número decimal?
String s = "0.01";
int i = Integer.parseInt(s);
Sin embargo, esto es lanzar una NumberFormatException ... ¿Qué puede ir mal?
código de Java es el siguiente:¿Cómo hacer un Integer.parseInt() para un número decimal?
String s = "0.01";
int i = Integer.parseInt(s);
Sin embargo, esto es lanzar una NumberFormatException ... ¿Qué puede ir mal?
0.01 no es un número entero (número entero), por lo que por supuesto no puede analizarlo como uno. Use Double.parseDouble
o Float.parseFloat
en su lugar.
String s = "0.01";
double d = Double.parseDouble(s);
int i = (int) d;
El motivo de la excepción es que un número entero no contiene números racionales (= básicamente fracciones). Por lo tanto, tratar de analizar 0.3
a un int es una tontería. Un double
o un tipo de datos float
puede contener números racionales.
La forma de Java proyecta una double
a un int
se realiza mediante la eliminación de la parte después del separador decimal mediante el redondeo hacia cero.
int i = (int) 0.9999;
i
will by zero.
Use Double.parseDouble(String a)
lo que está buscando no es un número entero, ya que no es un número entero.
uso,
String s="0.01";
int i= new Double(s).intValue();
String s="0.01";
int i = Double.valueOf(s).intValue();
uso éste
int number = (int) Double.parseDouble(s);
Este tipo de conversión es en realidad sorprendentemente poco intuitivo en Java
Tomemos, por ejemplo, una cadena siguiente: " 100.00 "
C: una simple función de biblioteca estándar al menos desde 1971 (Where did the name `atoi` come from?)
int i = atoi(decimalstring);
Java: paso obligatorio por doble (o flotador) analizar, seguido por un elenco
int i = (int)Double.parseDouble(decimalstring);
Java tiene algunas rarezas hasta su manga
C simplemente ignora el resto de la cadena, y analiza lo que sea que pueda analizar (en este caso, es '100').No hay manera de que usted sepa si 'atoi' en realidad analizó todo en la cadena o no, si la cadena contiene un número o si el número sobrepasa el tipo. 'strtol' es una mejor alternativa donde se pueden detectar todas las cosas anteriores. Java es más estricto, pero se asegura de que todos esos casos estén cubiertos. – nhahtdh
Estoy de acuerdo con Raywell porque esto funciona 'Double.valueOf (" 16543 "). IntValue();' Entonces Java quiere ser un PITA cuando desea convertir rápidamente a int, pero Double es mucho más general. –
Uso de BigDecimal para redondeo:
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();
Su elenco perderá por completo la información fraccionaria. No estoy seguro de que sea una buena idea aconsejar. – Joren
Ok! tal vez tendré que hacer algo como esto Double d = Double.parseDouble (s); ¿derecho? –
@Joren: Lo sé, pero él quiere un Entero (si verifico su código) –