Android TextView 通过从另一个类的双重转换将字符串显示到小数点后三位



当我使用另一个类的变量时,我无法将 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())))

您需要:

  1. 从文本视图中检索字符串。
  2. 将字符串转换为双精度/浮点数。
  3. 将双精度/浮点值格式化为小数点后 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));

最新更新