Как установить 2 десятичных знака в выражении sqlite select - PullRequest
0 голосов
/ 13 сентября 2011

У меня есть таблица sqlite, у которой есть поле количества со значением NUMERIC (10,5) (я знаю, что тип данных в sqlite имел небольшое значение).Я хочу написать оператор выбора, который отображает количество в 2 десятичных разрядах.

    id      name             type        notnull      dflt_value      pk   
------- --------------- ---------- ----------- -------------- --- 
0        _id              integer       0                            1    
1        name             varchar       1                            0    
2        amount           NUMERIC(10,5) 0                            0    

SELECT _id, name, amount FROM accounts

Можно ли преобразовать сумму в двух десятичных разрядах в операторе select, чтобы я мог отображать в приложении два знака после запятой.Мне нужно отформатировать в операторе выбора, не хочет менять структуру таблицы.Заранее спасибо.

Я использую следующий код для заполнения представления списка в Android

    cursor = dbAdapter.getAccountsTotals(); 
    startManagingCursor(cursor); 
    String[] from = new String[] { DbAdapter.KEY_ID, DbAdapter.KEY_NAME, DbAdapter.KEY_AMOUNT}; 
    int[] to = new int[] { R.id.dis1, R.id.dis2, R.id.dis3}; 
    SimpleCursorAdapter trans = new SimpleCursorAdapter(this, R.layout.accts_row, cursor, from, to); 
setListAdapter(trans); 

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

Ответы [ 2 ]

4 голосов
/ 13 сентября 2011
SELECT _id, name, ROUND(amount,2) FROM accounts

Следующий код даст вам представление о том, как вы можете это сделать

    

public class TestListView extends ListActivity {
  ...
  private DecimalFormat myCustDecFormatter = new DecimalFormat("########.00");
  ...
  ...
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState)  {
    ...
    ...
    ...
  }

private void fillData() {
    /* Get all of the rows from the database and create the item list */
    /* for mult accts, pass in acct name? */
    mEntryCursor = mDbHelper.fetchAllEntries();
    startManagingCursor(mEntryCursor);

    // Create an array to specify the fields we want to display in the list (only TITLE)
    String[] from = new String[]{myDbAdapter.KEY_NMBR,myDbAdapter.KEY_DATE,myDbAdapter.KEY_DESCR,myDbAdapter.KEY_AMT};

    // and an array of the fields we want to bind those fields to (in this case just text1)
    int[] to = new int[]{R.id.txtnmbr, R.id.txtdate, R.id.txtdescr, R.id.txtamt};

    // Now create a simple cursor adapter and set it to display
    setListAdapter(new SimpleCursorAdapter(this, R.layout.entryrow, mEntryCursor, from, to) {
        @Override
        public void setViewText(TextView v, String text) {
          super.setViewText(v, convText(v, text));
        }

    });

  }

  private String convText(TextView v, String text) {
    switch (v.getId()) {
      case R.id.txtamt:
        double dblAmt;
        //dblAmt = Double.valueOf(text);
        dblAmt = mEntryCursor.getDouble(AMT_COLUMN);
        return myCustDecFormatter.format(dblAmt);
    }
      return text;
    } 

}//end TestListView
2 голосов
/ 13 сентября 2011

Оставьте значение с плавающей запятой таким, как оно есть в базе данных, и форматируйте на уровне представления, примерно так:

 float f = 1.23456f;
    NumberFormat instance = NumberFormat.getInstance();
    instance.setMaximumFractionDigits(2);
    System.out.println(instance.format(f));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...