如何在 Android Studio 的 EditText 中填充浮点数和整数

Posted

技术标签:

【中文标题】如何在 Android Studio 的 EditText 中填充浮点数和整数【英文标题】:How to fill in float and integer in EditText in AndroidStudio 【发布时间】:2020-08-04 11:04:20 【问题描述】:

我正在尝试在我的应用程序的 EditText 字段中填写一个整数和一个浮点数。但是我的应用总是崩溃。

这就是我的 XML 的样子

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_
    android:layout_
    android:orientation="vertical"
    tools:context=".MainActivity">

<EditText
        android:id="@+id/int_LA"
        android:layout_
        android:layout_
        android:ems="10"
        android:hint="LA"
        android:inputType="number|numberDecimal" />

    <EditText
        android:id="@+id/int_LB"
        android:layout_
        android:layout_
        android:ems="10"
        android:inputType="number|numberDecimal"
        android:hint="LB"
        android:layout_below="@id/int_LA"/>
</LinearLayout>

这是我的 JAVA 代码

package com.example.plaatuitslagberekenen;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.text.InputType;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;

import static android.text.InputType.*;

public class MainActivity extends AppCompatActivity 

    Button button;
    TextView result;
    EditText int_LA, int_LB, int_LC, int_t, int_Ri_x, int_Ri_y;

    double result_num;
    double int_LA_num, int_LB_num, int_LC_num, int_t_num, int_Ri_x_num, int_Ri_y_num;
    double k_factor;
    double BA_1;
    double BA_2;
    double OneThirdth = 0.333333333;


    @Override
    protected void onCreate(Bundle savedInstanceState) 
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        result = (TextView)findViewById(R.id.result);
        int_LA = (EditText)findViewById(R.id.int_LA);

        int_LA.setInputType(TYPE_CLASS_NUMBER | TYPE_NUMBER_FLAG_DECIMAL);
        int_LB = (EditText)findViewById(R.id.int_LB);
        int_LC = (EditText)findViewById(R.id.int_LC);
        int_t = (EditText)findViewById(R.id.int_t);
        int_Ri_x = (EditText)findViewById(R.id.int_Ri_x);
        int_Ri_y = (EditText)findViewById(R.id.int_Ri_y);


        button = (Button) findViewById(R.id.button);

        button.setOnClickListener(new View.OnClickListener() 
            @Override
            public void onClick(View v) 


                    //BA_1 = (double) (Math.PI / 180) * int_Ri_x_num * (double) (int_t_num + 0.33 * int_t_num );
                    int_LA_num = Integer.parseInt(int_LA.getText().toString());
                    int_LB_num = Integer.parseInt(int_LB.getText().toString());
                    int_LC_num = Integer.parseInt(int_LC.getText().toString());
                    int_t_num = Integer.parseInt(int_t.getText().toString());
                    int_Ri_x_num = Integer.parseInt(int_Ri_x.getText().toString());
                    int_Ri_y_num = Integer.parseInt(int_Ri_y.getText().toString());
                    //result_num = (int_t_num) + int_LC_num + int_LA_num + int_LB_num + int_Ri_x_num + int_Ri_y_num + k_factor;
                    result_num = ((int_LA_num - int_t_num) + (int_LB_num - (int_t_num * 2)) + (int_LC_num - int_t_num) + ((OneThirdth * int_t_num) / 90) * (int_Ri_x_num) + ((OneThirdth * int_t_num) / 90) * (int_Ri_y_num));
                    System.out.println(((OneThirdth * int_t_num) / 90) * (int_Ri_x_num));

                    result.setText(String.format("%.1f", result_num));
            
        );
    

我希望 LA_num 有时是浮点数,有时是整数。我如何在这段代码中转换它。

编辑:

result_num = ((int_LA_num - int_LB_num)

EDIT_2:

添加“int_LA.setInputType(TYPE_CLASS_NUMBER | TYPE_NUMBER_FLAG_DECIMAL);”后的崩溃日志:

2020-04-21 19:47:47.163 12202-12202/com.example.plaatuitslagberekenen D/AndroidRuntime: Shutting down VM
2020-04-21 19:47:47.164 12202-12202/com.example.plaatuitslagberekenen E/AndroidRuntime: FATAL EXCEPTION: main
    Process: com.example.plaatuitslagberekenen, PID: 12202
    java.lang.NumberFormatException: For input string: "100.0"
        at java.lang.Integer.parseInt(Integer.java:615)
        at java.lang.Integer.parseInt(Integer.java:650)
        at com.example.plaatuitslagberekenen.MainActivity$1.onClick(MainActivity.java:52)
        at android.view.View.performClick(View.java:7125)
        at android.view.View.performClickInternal(View.java:7102)
        at android.view.View.access$3500(View.java:801)
        at android.view.View$PerformClick.run(View.java:27336)
        at android.os.Handler.handleCallback(Handler.java:883)
        at android.os.Handler.dispatchMessage(Handler.java:100)
        at android.os.Looper.loop(Looper.java:214)
        at android.app.ActivityThread.main(ActivityThread.java:7356)
        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:930)
2020-04-21 19:47:47.186 12202-12202/com.example.plaatuitslagberekenen I/Process: Sending signal. PID: 12202 SIG: 9

【问题讨论】:

您遇到了什么异常?请附上堆栈跟踪。 【参考方案1】:

将所有输入作为双精度:-

   double result_num;
    double int_LA_num, int_LB_num, int_LC_num, int_t_num, int_Ri_x_num, int_Ri_y_num;
    double k_factor;
    double BA_1;
    double BA_2;
    double OneThirdth = 0.333333333;

    int_LA_num = Double.parseDouble(int_LA.getText().toString());
    int_LB_num = Double.parseDouble(int_LB.getText().toString());
    int_LC_num = Double.parseDouble(int_LC.getText().toString());
    int_t_num = Double.parseDouble(int_t.getText().toString());
    int_Ri_x_num = Double.parseDouble(int_Ri_x.getText().toString());
    int_Ri_y_num = Double.parseDouble(int_Ri_y.getText().toString());
    //result_num = (int_t_num) + int_LC_num + int_LA_num + int_LB_num + 
    int_Ri_x_num + int_Ri_y_num + k_factor;
    result_num = ((int_LA_num - int_t_num) + (int_LB_num - (int_t_num * 2)) + 
    (int_LC_num - int_t_num) + ((OneThirdth * int_t_num) / 90) * 
    (int_Ri_x_num) + ((OneThirdth * int_t_num) / 90) * (int_Ri_y_num));

【讨论】:

如果我这样做,我的程序说我可以在我的总和中使用它,检查我在我的主要帖子中所做的编辑 我看到您的编辑根据您的更改编辑我的答案。你可以把所有的输入都加倍。一个整数会被 JVM 自动转换为 double 类型,因此将它们全部转换为 double 类型,那么无论它是 double 还是 integer,你都会得到 double 的结果。 哇!!它正在工作。那部分是编程中最令人满意的部分。非常感谢你:)))))))))))) 你让我的一天真的很棒:)【参考方案2】:

您可以在运行时或您的特定条件下更改您的 EditText 输入类型。

int_LA.setInputType(InputType.TYPE_CLASS_NUMBER | InputType.TYPE_NUMBER_FLAG_DECIMAL);

您可以在计算之前解析您的编辑文本数据。 请分享您的崩溃日志以确定崩溃的原因。

【讨论】:

我可以把这个放在哪里? “我希望 LA_num 有时是浮点数,有时是整数。如何在这段代码中转换它。”根据您的逻辑,您何时接受浮点数。

以上是关于如何在 Android Studio 的 EditText 中填充浮点数和整数的主要内容,如果未能解决你的问题,请参考以下文章

Android Studio 在界面之间传递数据

Android Studio Collapse 定义和方法

android中怎么让edit输入文字不换行

android studio 3 修改生成文件名

Android Studio 连接真机调试

android studio乱码