Android从数据库中填充ListView,格式为textview,带有两位小数

时间:2015-12-10 08:45:44

标签: android database listview

我有这个方法从数据库填充ListView。一切都很好。但是我希望其中一个文本字段显示带有两位小数的值。

以前曾经问过,很多标记都是重复的,但问题是如何实现两位小数以及我在下面的代码中的位置

正如你所看到的,我尝试了很多不同的事情而没有成功。也许我需要在我设置TextViews的地方构建自定义适配器?

请不要将此标记为副本,因为此处未给出答案:

Best way to Format a Double value to 2 Decimal places

或在这里:

Round a double to 2 decimal places

或在这里:

How to round a number to n decimal places in Java

这是我的代码,我的问题是我在哪里可以实现我的代码,最多可以舍入到两位小数?

if (isset($_GET['updateHistory'], $_GET['yesNo'])) {
    // you should sanitize your $_GET values before using them
    updateHistory($_GET['updateHistory'], $_GET['yesNo']);
}

2 个答案:

答案 0 :(得分:0)

首先,数据库中的数据类型是什么?是否设置为处理小数位/在DB中存储?你能改变数据库方面的舍入规则吗?

如果没有,您希望在代码中实现舍入。由于您在示例中使用的是SimpleCursorAdapter,因此它使用convertToString(Cursor)将数据输出到您的视图。

您可以做的是为您指定的列创建一个自定义字符串转换器,您可以在其中进行舍入。

例如:

CursorToStringConverter myConverter = new CursorToStringConverter() {

@Override
public CharSequence convertToString(Cursor cursor) {
   int myColumn = [whatever column id];
   String s = cursor.getString(myColumn); //Or .getFloat() for instance
   return [whatever rounding you want, or truncating, or such]
 }
}; 

然后在你的适配器上设置它:

myAdapter.setCursorToStringConverter(myConverter);

您还可以尝试为适配器提供一个新的ViewBinder,您可以在其中检查所需的列以及何时绑定,在绑定之前手动编辑输出,如下所示(在将适配器分配给之前将其粘贴)视图):

myAdapter.setViewBinder(new ViewBinder() {
@Override
public boolean setViewValue(View view, Cursor cursor, int columnIndex) {

    if (columnIndex == 3) {
            //If it is actually stored as float number in db, do
            //cursor.getFloat(columnIndex) instead
            String formatStr = cursor.getString(columnIndex);
            TextView textView = (TextView) view;

            //Here, do your truncating
            [insert whatever code to either truncate string or format float]

            textView.setText(fixedStr); 
            return true;
     }

     return false;
 }
});

要查看它是如何工作的,在进行截断或格式化之前,只需设置为[insert ...]:

String fixedStr = "Random string";  

你可能会看到它的作用。

答案 1 :(得分:0)

只是为了说明如何使用@Richar Erikssons代码解决问题,这里是解决我问题的代码

 myCursorAdapter.setViewBinder(new ViewBinder() {
         @Override
         public boolean setViewValue(View view, Cursor cursor, int 
         columnIndex) {
             if (columnIndex == 3) {


                     TextView textView = (TextView) view;


                     String fixedStr = String.valueOf(String.format("%.2f", 
                     cursor.getDouble(columnIndex)));

                     textView.setText(fixedStr); 
                     return true;
              }

              return false;
          }
         });