【问题标题】:How to limit values after decimal point in editText in android?如何在android中的editText中限制小数点后的值?
【发布时间】:2019-11-17 09:36:29
【问题描述】:

我已经建立了一个 BMI 计算器。在用户输入字段中,如何限制小数点后的位数? 这是我的代码:

package com.example.bmicalculator;

import androidx.appcompat.app.AppCompatActivity;

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

import java.text.DecimalFormat;

public class MainActivity extends AppCompatActivity {

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

    public double roundTwoDecimals(double d){

        DecimalFormat roundOff = new DecimalFormat("#.##");
        return Double.valueOf(roundOff.format(d));
    }

    public void buttonClicked(View v){

        EditText editTextHeight = findViewById(R.id.userHeight);
        EditText editTextWeight = findViewById(R.id.userWeight);

        TextView textViewResult = findViewById(R.id.userBMI);

        double height = Double.parseDouble(editTextHeight.getText().toString());
        double weight = Double.parseDouble(editTextWeight.getText().toString());

        double BMI = weight / (height * height);

        double cBMI = roundTwoDecimals(BMI);

        textViewResult.setText(Double.toString(cBMI));

        editTextHeight.setText("");
        editTextWeight.setText("");

    }
}

请不要将其标记为重复。我已经尝试过 * 中的所有方法 但它们都不适合我。

我用过下面的方法

    InputFilter filter = new InputFilter() {

        final int maxDigitsBeforeDecimalPoint = 4;
        final int maxDigitsAfterDecimalPoint = 1;

        @Override
        public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dStart, int dEnd) {

            StringBuilder builder = new StringBuilder(dest);
            builder.replace(dStart, dEnd, source.subSequence(start, end).toString());

            if(!builder.toString().matches(
                    "(([1-9]{1})([0-9]{0,"+(maxDigitsBeforeDecimalPoint-1)+"})?)?(\\.[0-9]{0,"+maxDigitsAfterDecimalPoint+"})?")){

                if(source.length() == 0){
                    return dest.subSequence(dStart, dEnd);
                }
                return "";
            }
            return null;
        }
    };

在editText中

editTextHeight.setFilters(new InputFilter[]{filter});
editTextWeight.setFilters(new InputFilter[]{filter});

【问题讨论】:

  • 你试过了吗? *.com/questions/5357455/…
  • @Md.Asaduzzaman 是的,在发布这个问题之前,我已经尝试了该链接中提到的所有方法,但没有用。
  • “我已经尝试了 * 中的所有方法,但没有一个对我有用。” – 请edit您的问题向我们准确展示您尝试过的方法,并准确展示每种方法如何不起作用。你真的不可能在这里找到数百个答案中的每一个。如果您不展示您尝试过的方法,那么您很可能会让它们重复给您,这只会浪费所有相关人员的时间。
  • @MikeM,此链接中提到的方法https://*.com/questions/5357455/limit-decimal-places-in-android-edittext。相信我,我都试过了,没有显示错误,editText 将在每个方法中接受超过 2 个十进制数字。

标签: android android-studio android-edittext decimal user-input


【解决方案1】:

您可以使用 TextWatcher.afterTextChanged() 来更改输入的文本。

【讨论】:

  • 我试过了,但是在输入“TextWatcher”之后。它没有显示任何方法。您能否提供一些代码,例如必须在哪里使用?我是 android 开发新手,这是我的第一个应用程序,所以。
  • TextWatcher 是你需要实现的接口。然后通过 setTextWatcher() 将该实现分配给 EditText。请参阅本教程以了解如何使用它:tutorialspoint.com/how-to-use-the-text-watcher-class-in-android
【解决方案2】:

尝试使用这种最简单的方法来限制小数点,

double BMI = weight / (height * height);
double cBMI = Double.parseDouble(String.format("%.02f", BMI));

"%.02f" 会将双精度值限制为小数点后两位,您可以根据需要进行更改,例如将双精度值限制为小数点后三位,您只需更改参数 ino "%.03f"

【讨论】:

  • 我可以得到 2 位小数的答案,但我想限制 editText 字段(用户输入)中的小数。即,用户在输入身高和体重时只能输入小数点后两位数。
  • 对不起,我误会了。
最近更新 更多