Как я должен остановить строки, которые числа округляются при отображении?

1

в моем приложении я показываю числовые строки и заметил, что "7.000444" отображается как "7.00044". Кроме того, "0,567567" отображается как "0,56757". Наконец, добавление любой не номерной части (т.е. буквы) делает их отображаемыми с полным номером, за которым следует другой ключ. Есть ли способ остановить поведение первых двух? Я показываю их, добавляя это в базу данных, которая затем отображается в ListView. Код для создания строки - это набор кнопок, для кнопок 0-9 это:

Button one;
one = (Button)findViewById(R.id.one);
one.setOnClickListener(new View.OnClickListener() {
        public void onClick(View v) {
            working = BigDecimal.valueOf(1);
            now = working.toString();
            total1 = total.concat(now);
            equation1 = equation.concat(now);
            equation = equation1;
            total = total1;
            if(b){mnDbHelper.updateNote(equation, mnDbHelper.testCount());}
            else{mnDbHelper.createNote(equation);
            b=true;}
            fillData();
        }
});

При изменении 1 при необходимости. Кнопка десятичной точки выглядит следующим образом:

Button decimal;
decimal = (Button)findViewById(R.id.decimal);
decimal.setOnClickListener(new View.OnClickListener() {

        public void onClick(View v) {
            now = ".";
            equation1 = equation.concat(now);
            total1 = total.concat(now);
            equation = equation1;
            total = total1;
            if(b){mnDbHelper.updateNote(equation, mnDbHelper.testCount());}
            else{mnDbHelper.createNote(equation);
            b=true;}
            fillData();
        }

});

Вот код для FillData:

private void fillData() {
    // Get all of the notes from the database and create the item list
    Cursor c = mnDbHelper.fetchAllNotes();

    startManagingCursor(c);

   String[] columns = new String[] {EquationsDbAdapter.KEY_VALUE};

   int to[] = new int[] {android.R.id.text1};

   SimpleCursorAdapter adapter = new SimpleCursorAdapter(this,android.R.layout.simple_list_item_1 ,c , columns , to);

   setListAdapter(adapter);

}

Вот пример кода для одной из других кнопок:

  Button times;
        times = (Button)findViewById(R.id.times);
        times.setOnClickListener(new View.OnClickListener() {

            public void onClick(View v) {
                now = "*";
                equation1 = equation.concat(now);r = equation;
                equation = equation1;z = equation;
                if(total!="")
                {try{
                    formatter.parse(total);
                }
                catch(Throwable t){
                    really = false;
                }
                if(really){
                    try {
                        mDbHelper.createNote((BigDecimal) formatter.parse(total), fa, fa, fa, fa, fa, fa, jkl, fa, fa);
                    } catch (ParseException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                total = "";
                total1 = "";}
                else{really = true;}}
                mDbHelper.createNote(jkl, fa, fa, t, fa, fa, fa, jkl, fa, fa);
                if(b){mnDbHelper.updateNote(equation, mnDbHelper.testCount());}
                else{mnDbHelper.createNote(equation);
                b=true;}
                fillData();
            }
    });

formatter выглядит следующим образом:

 DecimalFormat formatter = new DecimalFormat("##################################################################################.################################");

Изменение: как ни странно, "0,33333333" отображается неправильно, но когда * добавляется, он делает, однако, когда * вычитается из него снова, это не так. Как всегда, помощь приветствуется.

  • 2
    Вы должны делать что-то странное со своей строкой. Как вы отображаете это? System.out.println () не обрезает строки, независимо от их содержимого.
  • 3
    Как именно вы отображаете числа (или конвертируете их в строки)?
Показать ещё 6 комментариев
Теги:
database
string
listview

3 ответа

0
Лучший ответ

То, что я закончил, было просто добавлением пробела в начало строки, и это сработало.

1

Это так интересно, потому что очевидный, double а не BigDecimal, не тот случай. Вы упомянули базу данных. Возможно, вы перезагрузите поле из базы данных, а поле записи - DOUBLE а не DECIMAL или DECIMAL с неправильной точностью.

  • 0
    База данных сохраняет строку как строку. Другой, который выполняет вычисления, использует блоб. Что я нахожу странным, так это то, что «0,6758431» отображается неправильно, но после добавления * к нему оно отображается как «0,6758431 *».
1

Редактировать:

Да. Ну, проблема, похоже, не в объекте formatter. Он возвращает Double если не setParseBigDecimal(true), но вы получите ошибку приведения, если попытаетесь setParseBigDecimal(true) Double to BigDecimal. Я не думаю, что вам нужен форматировщик, и мне нужно вызвать следующее, но я не вижу, где это приводит к усечению:

new BigDecimal(total)

Подозревается, что где-то вы переходите от String к double или float который усекает точность BigDecimal. Например, вы уверены, что не выполняете:

working = BigDecimal.valueOf((double)value);

Убедитесь, что вы используете конструктор String для BigDecimal:

working = new BigDecimal(valueStr);

Это выполняет пошаговую обработку строки для создания BigDecimal без потери точности.

Если вы предоставите более подробную информацию (как и многие комментарии), и покажите код, который фактически создает BigDecimal чем я отредактирую свой ответ, чтобы предоставить дополнительную информацию.


Код:

if(total!="")

не является правильным. Вы редко хотите сравнивать строки с == или !=. Я подозреваю, что это должно быть:

if (!("".equals(total)))

или, может быть

if (total.length() > 0)
  • 0
    Я не отображаю работу, я отображаю уравнение, которое никогда не использует double или float для построения себя.
  • 0
    Пожалуйста, измените ваш вопрос, чтобы показать тот код, который @ jersam515.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню