Как заполнить число с плавающей точкой и целое число в EditText в AndroidStudio - PullRequest
0 голосов
/ 21 апреля 2020

Я пытаюсь заполнить целое и число с плавающей точкой в ​​поле 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_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

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

    <EditText
        android:id="@+id/int_LB"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        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:

Crashlog после добавления "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

Ответы [ 2 ]

0 голосов
/ 21 апреля 2020

Взять все входные данные как двойные: -

   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));
0 голосов
/ 21 апреля 2020

вы можете изменить ваш тип ввода EditText во время выполнения или в соответствии с указанным c условием.

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

вы можете выполнить синтаксический анализ ваших данных редактирования текста непосредственно перед вычислением. Пожалуйста, поделитесь своими журналами cra sh, чтобы определить причину cra sh.

...