Почему после вставки данных удаляется десятичное число?SQLite (разработка Android) - PullRequest
0 голосов
/ 22 ноября 2011

Я пытаюсь ввести такие значения, как «0,20» в таблице, но когда я отображаю их в действии, отображается «0,2» Я не уверен относительно того, почему '0' удаляется, то есть неверная структура таблицы, вставка или возвращение.

Моя таблица создана следующим образом:

db.execSQL("CREATE TABLE " + DATABASE_TABLE + " (" + KEY_ROWID
                + " INTEGER PRIMARY KEY AUTOINCREMENT, " + KEY_NAME
                + " TEXT NOT NULL, " + KEY_SWIMMERLAPS + " INT NOT NULL, "
                + KEY_SPONSOR + " DEC(4,2) NOT NULL );");

Затем я вставляю данные:

public long addSwimmer(String name, String laps, String sponsor) {
    int i = Integer.parseInt(laps);
    ContentValues cv = new ContentValues();
    cv.put(KEY_NAME, name);
    cv.put(KEY_SWIMMERLAPS, i);
    cv.put(KEY_SPONSOR, (new DecimalFormat("0.00##")).format(0.20));
    return ourDatabase.insert(DATABASE_TABLE, null, cv);
}

и затем верните спонсорские данные:

public String getSwimmerSponsors() {
    String[] columns = new String[] { KEY_SPONSOR };
    Cursor c = ourDatabase.query(DATABASE_TABLE, columns, null, null, null,
            null, KEY_SWIMMERLAPS + " DESC");
    String result = "";

    for (c.moveToFirst(); !c.isAfterLast(); c.moveToNext()) {
        result = result + c.getString(0) + "\n";
    }
    return result;
}

Редактировать - отображаемый результат отображается в моем макете следующим образом:

String sponsors = swimmerDb.getSwimmerSponsors();
    tvSponsor.setText(sponsors);

Спасибо.

Ответы [ 3 ]

1 голос
/ 22 ноября 2011

При разговоре числа 0,20 и 0,2 абсолютно совпадают.Если вы хотите сохранить форматирование, я предлагаю вставить значение в виде отформатированной строки.

cv.put(KEY_SPONSOR,0.20);

превращается в

cv.put(KEY_SPONSOR, (new DecimalFormat("0.00##")).format(0.20));

РЕДАКТИРОВАТЬ: Если вы идететаким образом, не забудьте изменить тип столбца KEY_SPONSOR с DEC на TEXT

1 голос
/ 22 ноября 2011

Поскольку вы отображаете неформатированную переменную Java, а начальные / конечные 0 подавляются.

Если вы хотите отформатировать его с определенным макетом, используйте один из вариантов printf / format:

printf("%.2f", num); // Etc.
0 голосов
/ 22 ноября 2011

SQLite не предлагает DECIMAL или аналогичные типы, в которых вы можете указать точность.Единственный тип данных с десятичными разрядами - это REAL, и именно так обрабатывается ваш номер.

Если вам нужна указанная точность, вы можете умножить (в данном случае на 100) и сохранить как INTEGER или использовать TEXTколонка.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...