您是否知道确保用户只能输入最大小数位数的数字的任何方法。我不确定如何解决这个问题。在MS
SQL数据库中,我将从应用程序中发送数据,我得到了具有这种类型的列。decimal(8,3)
现在考虑最终要存储要在Android中验证的值的列的数据类型,我已经考虑了这些两种情况:
现在,我可以确定第一种情况,而对于第二种情况则不是那么确定。 保持最大位数固定(例如,始终为8)是否正确?
还是我应该考虑允许小数点左边最多8位,小数点右边最多3位?
无论哪种方式,这都是我在Android中一直尝试的方法:
mQuantityEditText.addTextChangedListener(new TextWatcher() {
@Override
public void afterTextChanged(Editable s) {
String str = mQuantityEditText.getText().toString();
DecimalFormat format = (DecimalFormat) DecimalFormat
.getInstance();
DecimalFormatSymbols symbols = format.getDecimalFormatSymbols();
char sep = symbols.getDecimalSeparator();
int indexOFdec = str.indexOf(sep);
if (indexOFdec >= 0) {
if (str.substring(indexOFdec, str.length() - 1).length() > 3) {
s.replace(0, s.length(),
str.substring(0, str.length() - 1));
}
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
}
});
即使上面的代码处理最大的小数位数。它不限制EditText中允许的总位数。
您是否认为可以帮助我改善代码,使其同时处理最大小数位数和EditText中允许的总位数(考虑小数点左侧和右侧的两个数字)
好吧,现在我正在尝试JoãoSousa的建议,这是我已经尝试的方法:
1)我定义了一个实现InputFilter的类
public class NumberInputFilter implements InputFilter {
private Pattern mPattern;
public NumberInputFilter(int precision, int scale) {
String pattern="^\\-?(\\d{0," + (precision-scale) + "}|\\d{0," + (precision-scale) + "}\\.\\d{0," + scale + "})$";
this.mPattern=Pattern.compile(pattern);
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned destination, int destinationStart, int destinationEnd) {
if (end > start) {
// adding: filter
// build the resulting text
String destinationString = destination.toString();
String resultingTxt = destinationString.substring(0, destinationStart) + source.subSequence(start, end) + destinationString.substring(destinationEnd);
// return null to accept the input or empty to reject it
return resultingTxt.matches(this.mPattern.toString()) ? null : "";
}
// removing: always accept
return null;
}
}
2)尝试使用这样的类:
mQuantityEditText.setFilters(new InputFilter[] { new NumberInputFilter(8,3)} );
我会使用正则表达式的功能在编辑文本本身中进行过滤。首先是正则表达式:
^\-?(\d{0,5}|\d{0,5}\.\d{0,3})$
也许有多种方法可以改善这种表达方式,但这确实可以解决问题。
现在,只需在edittext中设置输入过滤器,如下所示:
final String regex = "^\-?(\d{0,5}|\d{0,5}\.\d{0,3})$";
((EditText)rootView.findViewById(R.id.editText1)).setFilters(new InputFilter[] {
new InputFilter() {
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned destination, int destinationStart, int destinationEnd) {
if (end > start) {
// adding: filter
// build the resulting text
String destinationString = destination.toString();
String resultingTxt = destinationString.substring(0, destinationStart) + source.subSequence(start, end) + destinationString.substring(destinationEnd);
// return null to accept the input or empty to reject it
return resultingTxt.matches(regex) ? null : "";
}
// removing: always accept
return null;
}
}
});
顺便说一句,我刚刚测试了这段代码,它的作用是:
我是否正确理解您描述的问题?
-编辑
好吧,我快到了。据我了解,decimal(8,3)表示最多8位数字,包括小数点左边或右边的数字,范围从-99999.999
到99999.999
。我至少从这句话中了解到这一点Standard SQL requires that DECIMAL(5,2) be able to store any value with five digits and two decimals, so values that can be stored in the salary column range from -999.99 to 999.99
。即使来自MySQL文档,MSSQL文档似乎也可以做到这一点。
问题内容: 我是angularjs的新手。我想知道什么是只允许在文本框中键入有效数字的方法。例如,用户可以键入“ 1.25”,但不能键入“ 1.a”或“ 1 ..”。当用户尝试输入下一个将使它成为无效数字的字符时,他将无法输入。 提前致谢。 问题答案: 您可以尝试使用此指令来阻止将任何无效字符输入到输入字段中。( 更新 :这依赖于对模型具有明确知识的指令,这对于可重用性而言并不理想,请参见下面的可
问题内容: 我有一个,我想将用户的输入限制为纯数字或带小数的数字(最多2个小数位)。 基本上,我要输入价格。 我想避免做正则表达式。有办法吗? 问题答案: 代替允许使用小数位数的,而使用允许最多两位的小数。
我有一个EditText,供用户输入电话号码,稍后会保存到sharedpreferences。但如果第一个数字是0,EditText似乎会删除它,我不希望这样。如何允许第一个数字为0?我尝试过使用android:digits=“0123456789”、android:inputType=“phone”和android:inputType=“number”。XML: Java:
我有一个,我希望将用户的输入限制为纯粹的数字或小数点后2位以下的数字。 基本上,我要求一个价格输入。 我想避免做regex。有办法做吗?
本文向大家介绍jQuery实现只允许输入数字和小数点的方法,包括了jQuery实现只允许输入数字和小数点的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了jQuery实现只允许输入数字和小数点的方法。分享给大家供大家参考,具体如下: 更多关于jQuery相关内容感兴趣的读者可查看本站专题:《jQuery拖拽特效与技巧总结》、《jQuery扩展技巧总结》、《jQuery常见经典特效汇总》