Преобразование Java в float в integer

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

Ответы

Ответ 1

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

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

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

Ответ 2

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

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

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

Ответ 3

Похоже, вы хотите сохранить 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.

Ответ 4

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

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