java - android千位分隔符和两位小数
问题描述
我需要一些帮助,因为我无法在 android studio 中工作。
我有一个 EditText,我想在用户写入时用逗号将其分隔成数千个(onTextChange),同时将其限制为 2 位或 8 位小数。
到目前为止,我已经能够通过放置“,”将输入分成千位,我还可以使用 InputFilter 限制小数位数,但每一个单独的,我不能同时执行一组操作,千位分隔符“,”并限制小数位数。有人可以帮我解决这个问题吗?
用以下我得到千位分隔符
import android.text.Editable;
import android.text.TextWatcher;
import android.util.Log;
import android.widget.EditText;
import java.util.StringTokenizer;
public class NumberTextWatcherForThousand implements TextWatcher {
EditText editText;
public NumberTextWatcherForThousand(EditText editText) {
this.editText = editText;
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
try
{
editText.removeTextChangedListener(this);
String value = editText.getText().toString();
if (value != null && !value.equals(""))
{
if(value.startsWith(".")){
editText.setText("0.");
}
if(value.startsWith("0") && !value.startsWith("0.")){
editText.setText("");
}
String str = editText.getText().toString().replaceAll(",", "");
if (!value.equals(""))
editText.setText(getDecimalFormattedString(str));
editText.setSelection(editText.getText().toString().length());
}
editText.addTextChangedListener(this);
return;
}
catch (Exception ex)
{
ex.printStackTrace();
editText.addTextChangedListener(this);
}
}
public static String getDecimalFormattedString(String value)
{
StringTokenizer lst = new StringTokenizer(value, ".");
String str1 = value;
String str2 = "";
if (lst.countTokens() > 1)
{
str1 = lst.nextToken();
str2 = lst.nextToken();
}
String str3 = "";
int i = 0;
int j = -1 + str1.length();
if (str1.charAt( -1 + str1.length()) == '.')
{
j--;
str3 = ".";
}
for (int k = j;; k--)
{
if (k < 0)
{
if (str2.length() > 0)
str3 = str3 + "." + str2;
return str3;
}
if (i == 3)
{
str3 = "," + str3;
i = 0;
}
str3 = str1.charAt(k) + str3;
i++;
}
}
public static String trimCommaOfString(String string) {
// String returnString;
if(string.contains(",")){
return string.replace(",","");}
else {
return string;
}
}
}
有了这个我限制小数
public class DecimalDigitsInputFilter implements InputFilter {
Pattern mPattern;
public DecimalDigitsInputFilter(int digitsBeforeZero,int digitsAfterZero) {
mPattern=Pattern.compile("[0-9]{0," + (digitsBeforeZero-1) + "}+((\\.[0-9]{0," + (digitsAfterZero-1) + "})?)||(\\.)?");
}
@Override
public CharSequence filter(CharSequence source, int start, int end, Spanned dest, int dstart, int dend) {
Matcher matcher=mPattern.matcher(dest);
if(!matcher.matches())
return "";
return null;
}
}
public static Double formatdecimal(Double num, Integer numdecimal) {
return Math.round(num* Math.pow(10, numdecimal)) / Math.pow(10, numdecimal);
}
第一个用于分隔千位,第二个用于限制小数,但我找不到我需要的方法,我想限制小数并分隔数千
解决方案
推荐阅读
- jhipster - 向实体添加新属性后,Jhipster 与所有实体发生冲突
- java - JAVA:java.nio.Files move 命令不适用于共享 NAS 位置
- python - 提取相同标签的信息
- javascript - 使用 css-grid 和 flexbox 时如何排列元素?
- python - 3D Ursina 游戏中的照明
- python - 转换嵌套列表类型
- python - sqlite3.OperationalError:我的代码输入不完整
- reactjs - 在 React 中从 API 获取加载器状态
- pointers - glibc malloc 什么时候省略块链表指针
- android - 处理 RX 中的 response.body == null