2015-01-13 4 views
0

Я получил этот код, который извлекает поплавки из базы данных.Удалите ненужные десятичные знаки

for (int i = 0; i < ingredient.size() ; i++) { 
    Ingredient ing = (Ingredient) ingredient.get(i); 
    ingredients += String.valueOf(ing.getAmount()) + " " + 
        ing.getUnit() + " " + ing.getIngredient() + "\n"; 
} 

база данных записывается в реальных значениях, как некоторые из них 1,5, 2,5, 1,4 и т.д. Но у нас есть эти целые числа без необходимости в десятичной системе, например, 1, 4, 10 и т.д. Проблема заключается в том, что таблица базы данных должна быть в РЕАЛЬНОМ значении, что не дает нам выбора, кроме как дать всем значениям одну десятичную величину, независимо от того, нужна она или нет.

Таким образом, мы в конечном итоге со значениями, как: 1,0 1,5 2,3 20,0 5,0

Мой вопрос: Как мы удалить ненужные десятичные, но сохранить те, которые нуждаются в ней?

+1

Что такое «Ингредиент»? [Это кажется актуальным] (http://fbim.fh-regensburg.de/~saj39122/oop/unterlagen/projekte/sunbreaker/javadoc/de/londrik/sunbreaker/xml/Ingredient.html) каким-то образом, но это все еще не " t помогите нам понять ваш вопрос. –

+0

Отдельный номер из представления. – Mena

+0

Итак, вы хотите избавиться от десятичных знаков, если это число равно 1,0 или 20,0 или 5,0? Но не тогда, когда у них 1,5 или 2,3? – DreadHeadedDeveloper

ответ

0

Один очень простой способ удалить их - это разделить символы с помощью StringUtils.

String displayValue = String.valueOf(ing.getAmount()); 

displayValue = StringUtils.stripEnd(displayValue, ".0"); 

Для ввода "1.0", "1" будут возвращены.

Более технический подход будет использовать оператор модуля %

Например:

if(value%1 == 0){ //1 divides into number perfectly, there is no decimal 
    //cast value to integer or another non decimal variable 
} else { 
    //use existing value as it contains a decimal 
} 
0

Преобразовать ваш String вернулся из ing.getAmount() к Float объекту, а затем использовать функцию по модулю, чтобы определить, является ли значение кратно 1 (т.е. без знаков после запятой). Если это так, конвертируйте свой объект Float в int, который объединит десятичные знаки.

Float f = Float.valueOf(ing.getAmount()); 
if(f%1 == 0) { 
    // Use f.intValue() to concatenate your decimals. 
    ingredients +=String.valueOf(f.intValue() + " " + ing.getUnit() + " " + ing.getIngredient() + "\n"; 
} 
else { 
    ingredients +=String.valueOf(ing.getAmount()) + " " + ing.getUnit() + " " + ing.getIngredient() + "\n"; 
} 

Надеюсь, это поможет.

+0

Это выглядит правильно, спасибо! :) –

+0

@KimKakanAndersson - Ваше приветствие, рад, что я мог бы помочь. Не забудьте обновить ответы, которые вы нашли полезными, и выберите наиболее полезный ответ, щелкнув рядом с ним серый тик. –

+0

Если бы я мог. У меня пока нет репутации :-) –

0

Как об этом (does't требует каких-либо фантазии вещи, как StringUtils)?

String s = String.valueOf(1.0); 
    System.out.println(s); 

    /* Make this block as a function and return an int */ 
    String ss = " "; 
    if (s.charAt(s.length()-2) == '.' && s.charAt(s.length()-1) == '0'){ 
     ss = s.substring(0,s.length()-2); 
     System.out.println(ss); 
    } 
    /**************************************************/ 
    int converted = Integer.parseInt(ss); 
    System.out.println(converted); 

} 

Если вы хотите сделать это функциональным блоком, вы можете.

Вы можете проверить его работу на IDEONE - http://ideone.com/udJv8M

0

Проверьте значения с плавающей точкой с по модулю. Если 0 возвращается, это целое число. Вот пример с цифрой, которые вы упомянули:

List<Float> values = new ArrayList<Float>(); 
    values.add(new Float(1.0f)); 
    values.add(new Float(1.5f)); 
    values.add(new Float(2.3f)); 
    values.add(new Float(20.0f)); 
    values.add(new Float(5.0f)); 

    List<String> strValues = new ArrayList<String>(); 

    for(Float value : values) 
    { 
     String strValue = ""; 
     if(value % 1 == 0) 
     { 
      Integer intValue = value.intValue(); 
      strValue = intValue.toString(); 
      strValues.add(strValue); 
     } 
     else 
     { 
      strValue = value.toString(); 
      strValues.add(strValue); 
     } 

     System.out.println(strValue); 
    } 
0

Вы можете использовать custom DecimalFormat pattern:

public static String customFormat(String pattern, double value) { 
    DecimalFormat myFormatter = new DecimalFormat(pattern); 
    return myFormatter.format(value); 
} 

Затем образец # определяет места держателей для дополнительных цифр, поэтому #.### даст до 3 если необходимо, только цифры.

for (int i = 0; i < ingredient.size() ; i++) { 
    Ingredient ing = (Ingredient) ingredient.get(i); 
    ingredients += customFormat("#.###", ing.getAmount()) + 
        " " + ing.getUnit() + " " + ing.getIngredient() + "\n"; 
} 
0

Поэтому не конвертируйте свои данные в строку, за исключением отображения только. Реальные числа могут представлять как целые числа, так и числа с плавающей запятой, используя один и тот же тип данных.Плюс, если вам когда-либо понадобилась математика на ваших номерах, вы не можете использовать Strings для этого. Если вы конвертируете свои номера из базы данных непосредственно в String, прежде чем хранить их в Ingredient, тогда вы ввернете себя позже, если хотите делать вычисления на этих числах. (Скажем, вы хотели добавить функцию, чтобы удвоить рецепт и изменить все величины для пользователя). В соответствии с вашим текущим планом вы мешаете себе делать что-то подобное, потому что вы слишком сосредоточены на отображении этого числа.

Вместо этого просто создайте метод для ингридиента для преобразования чисел с помощью String.format(). Как так:

public class Ingredient { 
    private double amount; 
    private String name; 

    public String asDecimal() { 
     return String.format("%.1f", amount); 
    } 

    public String asInteger() { 
     return String.format("%.0f", amount); 
    } 

    public String asFraction() { 
     // exercise left to the reader 
    } 
} 

Можно даже добавить функцию, которая преобразует десятичную в дробные количества, чтобы сделать его проще показать вещи руководители могли понять против знаков после запятой, которые труднее. Помните, что String.format() будет округлять суммы с плавающей запятой (0.5 -> 1, используя Integer).

Смежные вопросы