我有这个方法从数据库填充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']);
}
答案 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;
}
});