Ответ 1
Просто попробуйте int i = (int) f;
.
EDIT: Я вижу суть вопроса. Этот код может работать:
int i = (int) f;
String valToStore = (i == f) ? String.valueOf(i) : String.valueOf(f);
Я хочу сделать такую операцию: если заданные числа с плавающей запятой равны 1.0, 2.0, 3.0, я хочу сохранить их в базе данных как целое (1,2,3), если они похожи на 1.1, 2.1, 3.44, я сохраняю их как float. какое лучшее решение для этой проблемы использует java? Соответствующим полем в базе данных является тип varchar.
Просто попробуйте int i = (int) f;
.
EDIT: Я вижу суть вопроса. Этот код может работать:
int i = (int) f;
String valToStore = (i == f) ? String.valueOf(i) : String.valueOf(f);
String result = "0";
if (floatVar == Math.floor(floatVar)) {
result = Integer.toString((int) floatVar);
} else {
result = Float.toString(floatVar);
}
Предложение if проверяет, является ли число целым числом, т.е. если оно равно результату округления до ближайшего целого значения.
Но это очень странное требование, и, возможно, вам следует пересмотреть необходимость в такой вещи.
Похоже, вы хотите сохранить Float без конечных чисел в качестве целых чисел, сохраняя при этом значимые конечные числа как Float. Я бы предпочел просто сохранить все это как Float в DB, но это ваш вопрос, так вот мой ответ:
/**
* 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.
Не уверен, что это лучшее решение, но вы можете попытаться написать такой метод:
String convertToString(Float f) {
if (f.toString().endsWith(".0"))
return f.intValue().toString();
else
return f.toString();
}