2009-09-20 49 views

Respuesta

48

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.

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

+2

Su elenco perderá por completo la información fraccionaria. No estoy seguro de que sea una buena idea aconsejar. – Joren

+1

Ok! tal vez tendré que hacer algo como esto Double d = Double.parseDouble (s); ¿derecho? –

+1

@Joren: Lo sé, pero él quiere un Entero (si verifico su código) –

2

Use Double.parseDouble(String a) lo que está buscando no es un número entero, ya que no es un número entero.

18

uso,

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

uso éste

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

7

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

+0

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

+0

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

2

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(); 
Cuestiones relacionadas