2010-02-02 6 views
14

Я хочу сделать такую ​​операцию: если заданные числа с плавающей запятой равны 1.0, 2.0, 3.0, я хочу сохранить их в базу данных как целое (1,2,3), если они как 1.1, 2.1, 3.44, я сохраняю их как float. Какое самое лучшее решение для этой проблемы с помощью java? Соответствующим полем в базе данных является тип varchar.Java convert float to integer

+0

Это действительно сбивает с толку; вы спрашиваете, как использовать Float.toString (val)? – Will

+0

Вы уверены, что числа с плавающей запятой действительно подходят для вашей проблемной области? Если вам нужна точность, вы должны использовать BigDecimal –

ответ

19

Попробуйте int i = (int) f;.

EDIT: Я вижу точку в вопросе. Этот код может работать:

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

. Это преобразует все значения float в ints, что не совсем то, что задавал оригинальный вопрос. – 2010-02-02 09:24:06

+1

как насчет струны, чувак? вы конвертируете float в int. это не то, что я хочу. – Sawyer

+1

На самом деле это отлично работает: оно не преобразует все значения float в ints. Он сохраняет значение int в «i» только для сравнения со значением float. Если это то же самое (т. Е. Заканчивается на .0), тогда он возвращает «i», иначе возвращается исходное значение в виде строки ... @Tony, valToStore - это строка. Это то, о чем вы просили ... – Philippe

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

КРП-п проверяет, является ли число является целым числом - то есть, если она равна результату округления вниз до ближайшего целого значения.

Но это очень странное требование, и, возможно, вам следует пересмотреть необходимость в такой вещи.

+3

Он запрашивал целую строку, поэтому преобразование строки в int должно быть чем-то вдоль строк String str = Integer.tostring ((int) floatVar); –

+0

ах, да, пропустил часть «целая строка». спасибо – Bozho

+0

спасибо, но я не думаю, что это быстро. – Sawyer

0

Не уверен, что это лучшее решение, но вы можете попробовать написать метод, как это:

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

Похоже, что вы хотите сохранить Поплавки без каких-либо чисел хвостовых как Целые, при сохранении тех, со значительным завершающего числа как плавающие. Я предпочел бы просто сохранить все это, как Float к БД, но это ваш вопрос, так вот мой ответ:

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

Это, как вы будете использовать этот метод:

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

После этого, вы можете выполните операцию базы данных с помощью переменной oNumToSave.