2010-02-02 12 views
14

Quiero hacer una operación como esta: si los números de flotación dados son como 1.0, 2.0, 3.0, quiero guardarlos en la base de datos como un entero (1,2,3), si son como 1.1, 2.1,, 3.44, los guardo como float. ¿Cuál es la mejor solución para este problema usando Java? El campo correspondiente en la base de datos es tipo de varchar.Java flotante de conversión a entero

+0

Esto es realmente confuso; ¿Estás preguntando cómo usar Float.toString (val)? – Will

+0

¿Estás seguro de que los números de coma flotante realmente son los más adecuados para tu dominio de problema? Si quiere precisión, debe usar BigDecimal –

Respuesta

19

Intente int i = (int) f;.

EDIT: Veo el punto en la pregunta. Este código podría funcionar:

int i = (int) f; 
String valToStore = (i == f) ? String.valueOf(i) : String.valueOf(f); 
+1

Esto convertirá todos los valores de flotación en ints, que no es realmente lo que la pregunta original estaba haciendo. –

+1

¿Qué pasa con la cuerda float, amigo? usted convierte un flotador a int. esto no es lo que quiero. – Sawyer

+1

En realidad, esto funciona bien: no está convirtiendo todos los valores float a ints. Está almacenando el valor int en "i" solo para compararlo con el valor flotante. Si es igual (es decir, termina con .0), entonces devuelve "i", de lo contrario, devuelve el valor original como una cadena ... @Tony, valToStore es una cadena. Esto es lo que pediste ... – Philippe

5
String result = "0"; 
if (floatVar == Math.floor(floatVar)) { 
    result = Integer.toString((int) floatVar); 
} else { 
    result = Float.toString(floatVar); 
} 

El si-cláusula comprueba si el número es un número entero - es decir, si es igual al resultado de redondeo hacia abajo al valor entero más cercano.

Pero este es un requisito muy extraño, y tal vez debería reconsiderar la necesidad de tal cosa.

+3

Preguntaba una cadena de enteros, por lo que la conversión de la línea a un int debería ser algo similar a String str = Integer.tostring ((int) floatVar); –

+0

ah, sí, se perdió la parte de "cadena de enteros". gracias – Bozho

+0

gracias, pero no creo que esto sea rápido. – Sawyer

0

No estoy seguro es la mejor solución, pero se puede tratar de escribir un método como este:

String convertToString(Float f) { 
    if (f.toString().endsWith(".0")) 
     return f.intValue().toString(); 
    else 
     return f.toString(); 
} 
1

parece que desea guardar los flotadores sin números se arrastran como enteros, mientras que el ahorro de los sistemas de arrastre significativa números como flotadores. Prefiero simplemente guardarlo todo como flotador con el PP, pero es tu pregunta así que aquí está mi respuesta:

/** 
    * Method to determine if trailing numbers are significant or not. Significant 
    * here means larger than 0 
    * 
    * @param fFloat 
    * @return 
    */ 
    public static boolean isTrailingSignificant(Float fFloat) 
    { 
    int iConvertedFloat = fFloat.intValue();// this drops trailing numbers 
    // checks if difference is 0 
    return ((fFloat - iConvertedFloat) > 0); 
    } 

Ésta es la forma en que utilizaría este método:

Number oNumToSave = null; 
if (isTrailingSignificant(fFloat)) 
{ 
    // save float value as is 
    oNumToSave = fFloat; 
} 
else 
{ 
    // save as int 
    oNumToSave = fFloat.intValue();// drops trailing numbers  
} 

Después de eso, se puede hacer la operación de la base de datos usando la variable oNumToSave.

Cuestiones relacionadas