【发布时间】: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