2010-02-02 21 views
14

Voglio eseguire un'operazione come questa: se i numeri float indicati sono come 1.0, 2.0, 3.0, voglio salvarli nel database come numero intero (1,2,3), se sono come 1.1, 2.1, 3.44, li salvo come float. qual è la migliore soluzione per questo problema usando java? Il campo corrispondente nel database è il tipo di varchar.Java converte float in intero

+0

Questo è davvero confuso; stai chiedendo come usare Float.toString (val)? – Will

+0

Sei sicuro che i numeri in virgola mobile siano davvero adatti al tuo dominio problematico? Se vuoi precisione, dovresti usare BigDecimal –

risposta

19

Basta provare int i = (int) f;.

MODIFICA: Vedo il punto nella domanda. Questo codice potrebbe funzionare:

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

Questo convertirà tutti i valori float in ints, che non è proprio quello che la domanda originale stava chiedendo. –

+1

E per quanto riguarda la stringa float, amico? tu converti un float in int. questo non è quello che voglio. – Sawyer

+1

In realtà funziona bene: non converte tutti i valori float in ints. Memorizza il valore int in "i" solo per il confronto con il valore float. Se è lo stesso (vale a dire termina con .0), restituisce "i", altrimenti restituisce il valore originale come stringa ... @Tony, valToStore è una stringa. Questo è quello che hai chiesto ... – Philippe

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

controlli IF-clausola se il numero è un numero intero - cioè se è uguale al risultato di arrotondamento giù al numero intero più vicino.

Ma questo è davvero un requisito molto strano, e forse dovresti riconsiderare la necessità di una cosa del genere.

+3

Stava chiedendo una stringa intera, quindi la linea che converte in un int dovrebbe essere qualcosa sulla falsariga di String str = Integer.tostring ((int) floatVar); –

+0

ah, sì, mancava la parte "stringa intera". grazie – Bozho

+0

grazie, ma non penso che sia veloce. – Sawyer

0

Non sono sicuro questa è la soluzione migliore, ma si può provare a scrivere un metodo come questo:

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

Sembra che si desidera salvare Galleggianti senza numeri di trascinamento come interi, mentre il risparmio di quelli con trailing significativa numeri come galleggianti. Avrei preferito basta salvare il tutto come Float al DB, ma è la tua domanda ecco la mia risposta:

/** 
    * 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); 
    } 

Ecco come si può usare questo metodo:

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

Dopo di che, si può eseguire l'operazione del database utilizzando la variabile oNumToSave.