当我遵循的每个示例都使用相同的转换时,为什么我无法在没有致命异常的情况下将字符串转换为 Float?
Why am I not able to convert a string to a Float without an Fatal Exception when every example I've followed has used the same casting?
真的要在这里扯掉我的头发了。我一整天都在尝试让非常简单的程序在 Android Studio 中的 Java 中运行,而在其他语言和 IDE 中我没有遇到任何问题。我遵循了多个教程,只是试图让简单的程序正常工作。我遇到了一个致命异常错误,说 java.lang 无法将字符串转换为浮点数。
这是我的代码,它的一页只是试图取一个浮点数,将它乘以另一个浮点数,然后将乘积添加到第一个浮点数,我留下了一些尝试来“解决”问题,所以如果他们看起来很糟糕,因为我正在尝试一切:
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
EditText priceText, taxText, finalText;
Button button;
float price = 0.00f;
float tax = 0.0f;
float finalprice = 0.00f;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
priceText = findViewById(R.id.priceText);
priceText.setText(String.valueOf(price));
taxText = findViewById(R.id.taxText);
String str = tax + "%";
taxText.setText(str);
finalText = findViewById(R.id.finalText);
finalText.setText(String.valueOf(finalprice));
button = findViewById(R.id.calcButton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//String p = priceText.getText().toString();
price = convertStringToFloat(priceText.getText().toString());
//String t = taxText.getText().toString();
tax = Float.parseFloat(String.valueOf(taxText));
float _taxes = price * tax;
finalprice = price + _taxes;
finalText.setText(String.valueOf(finalprice));
}
});
}
public static float convertStringToFloat(String str)
{
return Float.parseFloat(str);
}
}
当应用程序崩溃时,控制台不断吐出以下内容:
2021-09-07 10:15:34.700 7772-7772/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplication, PID: 7772
java.lang.NumberFormatException: For input string: "androidx.appcompat.widget.AppCompatEditText{53d2c07 VFED..CL. .F...... 312,404-762,551 #7f08019b app:id/taxText aid=1073741826}"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
at java.lang.Float.parseFloat(Float.java:451)
at com.example.myapplication.MainActivity.onClick(MainActivity.java:42)
at android.view.View.performClick(View.java:7161)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
at android.view.View.performClickInternal(View.java:7133)
at android.view.View.access00(View.java:804)
at android.view.View$PerformClick.run(View.java:27416)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:241)
at android.app.ActivityThread.main(ActivityThread.java:7617)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)
2021-09-07 10:15:34.728 7772-7772/com.example.myapplication I/Process: Sending signal. PID: 7772 SIG: 9
您似乎在这里失败了:
tax = Float.parseFloat(String.valueOf(taxText));
taxText
是一个 EditText
小部件:
EditText priceText, taxText, finalText;
如果您尝试获取用户输入的值,请将 String.valueOf(taxText)
替换为 taxText.getText().toString()
。
请注意,用户可能仍会输入一个不是有效浮点数的值,因此您仍然希望将 parseFloat()
调用包装在 try
/catch
并在收到无效输入时采取一些措施(例如,通过 Log.e()
将消息记录到 Logcat 并向用户提供一些错误反馈)。
真的要在这里扯掉我的头发了。我一整天都在尝试让非常简单的程序在 Android Studio 中的 Java 中运行,而在其他语言和 IDE 中我没有遇到任何问题。我遵循了多个教程,只是试图让简单的程序正常工作。我遇到了一个致命异常错误,说 java.lang 无法将字符串转换为浮点数。
这是我的代码,它的一页只是试图取一个浮点数,将它乘以另一个浮点数,然后将乘积添加到第一个浮点数,我留下了一些尝试来“解决”问题,所以如果他们看起来很糟糕,因为我正在尝试一切:
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
public class MainActivity extends AppCompatActivity {
EditText priceText, taxText, finalText;
Button button;
float price = 0.00f;
float tax = 0.0f;
float finalprice = 0.00f;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
priceText = findViewById(R.id.priceText);
priceText.setText(String.valueOf(price));
taxText = findViewById(R.id.taxText);
String str = tax + "%";
taxText.setText(str);
finalText = findViewById(R.id.finalText);
finalText.setText(String.valueOf(finalprice));
button = findViewById(R.id.calcButton);
button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//String p = priceText.getText().toString();
price = convertStringToFloat(priceText.getText().toString());
//String t = taxText.getText().toString();
tax = Float.parseFloat(String.valueOf(taxText));
float _taxes = price * tax;
finalprice = price + _taxes;
finalText.setText(String.valueOf(finalprice));
}
});
}
public static float convertStringToFloat(String str)
{
return Float.parseFloat(str);
}
}
当应用程序崩溃时,控制台不断吐出以下内容:
2021-09-07 10:15:34.700 7772-7772/com.example.myapplication E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.myapplication, PID: 7772
java.lang.NumberFormatException: For input string: "androidx.appcompat.widget.AppCompatEditText{53d2c07 VFED..CL. .F...... 312,404-762,551 #7f08019b app:id/taxText aid=1073741826}"
at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:2043)
at sun.misc.FloatingDecimal.parseFloat(FloatingDecimal.java:122)
at java.lang.Float.parseFloat(Float.java:451)
at com.example.myapplication.MainActivity.onClick(MainActivity.java:42)
at android.view.View.performClick(View.java:7161)
at com.google.android.material.button.MaterialButton.performClick(MaterialButton.java:1119)
at android.view.View.performClickInternal(View.java:7133)
at android.view.View.access00(View.java:804)
at android.view.View$PerformClick.run(View.java:27416)
at android.os.Handler.handleCallback(Handler.java:883)
at android.os.Handler.dispatchMessage(Handler.java:100)
at android.os.Looper.loop(Looper.java:241)
at android.app.ActivityThread.main(ActivityThread.java:7617)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:492)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:941)
2021-09-07 10:15:34.728 7772-7772/com.example.myapplication I/Process: Sending signal. PID: 7772 SIG: 9
您似乎在这里失败了:
tax = Float.parseFloat(String.valueOf(taxText));
taxText
是一个 EditText
小部件:
EditText priceText, taxText, finalText;
如果您尝试获取用户输入的值,请将 String.valueOf(taxText)
替换为 taxText.getText().toString()
。
请注意,用户可能仍会输入一个不是有效浮点数的值,因此您仍然希望将 parseFloat()
调用包装在 try
/catch
并在收到无效输入时采取一些措施(例如,通过 Log.e()
将消息记录到 Logcat 并向用户提供一些错误反馈)。