当我使用另一个类的变量时,我无法将 TextView 限制为仅显示 3 位小数。问题是这样的:
我有这个文本视图
public static TextView pt_resultado;
但是,当我尝试使用它来显示从另一个屏幕输入的数字时,同时从双限制小数转换:
pt_resultado.setText(String.format("%.3f",(Double.toString(ActivityPopulacao.pt_resultado2))));
我收到以下错误:
java.util.IllegalFormatConversionException: %f can't format java.lang.String arguments
有没有办法只显示三位小数,在不改变转换的情况下放置?
您正在尝试将字符串作为浮点数插入。 你应该做:
pt_resultado.setText(String.format("%.3f",Double.valueOf(ActivityPopulacao.pt_resultado2.getText().toString())))
您需要:
- 从文本视图中检索字符串。
- 将字符串转换为双精度/浮点数。
- 将双精度/浮点值格式化为小数点后 3 位的字符串。
我以为ActivityPopulacao.pt_resultado2也是文本视图!
为了帮助您也了解为什么会发生这种情况,请稍微打破它的流程。
double recievedNum = ActivityPopulacao.pt_resultado2;
String convertedNumAsString = String.format ("%.3f", recievedNum);
pt_resultado.setText(convertedNumAsString);
你能看出错误吗?你使用Double.toString(number(,它需要一个数字。String.format 采用双精度执行格式并为您转换为字符串。
将文本视图定义为静态视图将导致内存泄漏。展望未来,您可以使用Intent
将值从一个活动传递到另一个活动 - 我假设您正在使用活动。此外,getText().toString()
已经将输入值转换为字符串。所以你不再需要那个Double.toString()
了。复制下面的代码并将其粘贴到负责启动新活动的代码中。
Intent in = new Intent(ActivityPopulacao.this, NewActivity.class);
in.putExtra("key", pt_resultado2.getText().toString());
startActivity(in);
若要接收值,请在 NewActivityonCreate()
方法中获取字符串的意图和请求。
String newDouble = getIntent().getStringExtra("key");
pt_resultado.setText(newString);
请注意,上述代码片段中的NewActivity
是指需要该值的活动。
为什么要转换为字符串并尝试将其格式化为Double
?format()
方法需要数字的格式。
由于ActivityPopulacao.pt_resultado2
是双精度值,因此应格式化双精度值:
pt_resultado.setText(String.format("%.3f", ActivityPopulacao.pt_resultado2));