Java конвертировать с плавающей точкой в ​​целое число - PullRequest
14 голосов
/ 02 февраля 2010

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

Ответы [ 4 ]

19 голосов
/ 02 февраля 2010

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

РЕДАКТИРОВАТЬ: я вижу точку в вопросе. Этот код может работать:

 int i = (int) f;
 String valToStore = (i == f) ? String.valueOf(i) : String.valueOf(f);
5 голосов
/ 02 февраля 2010
String result = "0";
if (floatVar == Math.floor(floatVar)) {
    result = Integer.toString((int) floatVar);
} else {
    result = Float.toString(floatVar);
}

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

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

1 голос
/ 12 февраля 2013

Похоже, что вы хотите сохранить числа с плавающей точкой без конечных чисел в виде целых чисел, при этом сохраняя числа со значительными конечными числами как числа с плавающей точкой Я бы предпочел просто сохранить все как 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.

0 голосов
/ 02 февраля 2010

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

String convertToString(Float f) {
  if (f.toString().endsWith(".0"))
      return f.intValue().toString();
  else
      return f.toString();
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...