所有-我有一个TextWatcher
,它将EditText
格式化为货币格式:
private String current = "";
public void onTextChanged(CharSequence s, int start, int before, int count) {
if(!s.toString().equals(current)){
editText$.removeTextChangedListener(this);
String cleanString = s.toString().replaceAll("[$,.]", "");
double parsed = Double.parseDouble(cleanString);
String formated = NumberFormat.getCurrencyInstance().format((parsed/100));
current = formated;
editText$.setText(formated);
editText$.setSelection(formated.length());
editText$.addTextChangedListener(this);
}
}
这很好,问题是我的编辑文本只需要整数,所以我不允许用户输入美分。因此,我想要1比12比123比1234,而不是0.01比0.12比1.23比12.34。如何去掉小数点,但保留逗号?非常感谢。
为什么不用currencyFormat格式化金额,然后取出。字符串中的00。
private static final ThreadLocal<NumberFormat> currencyFormat = new ThreadLocal<NumberFormat>() {
@Override
protected NumberFormat initialValue() {
return NumberFormat.getCurrencyInstance();
}
};
currencyFormat。get()。格式(
Hexar的答案很有用,但当用户删除所有数字或移动光标时,它缺乏错误检测。我在他的答案和这里的答案的基础上形成了一个完整的解决方案。由于在onTextChanged()方法中设置EditText,这可能不是最佳实践,但它有效。
/* don't allow user to move cursor while entering price */
mEditText.setMovementMethod(null);
mEditText.addTextChangedListener(new TextWatcher() {
private String current = "";
NumberFormat formatter = NumberFormat.getCurrencyInstance();
private double parsed;
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!s.toString().equals(current)) {
/* remove listener to prevent stack overflow from infinite loop */
mEditText.removeTextChangedListener(this);
String cleanString = s.toString().replaceAll("[$,]", "");
try {
parsed = Double.parseDouble(cleanString);
}
catch(java.lang.NumberFormatException e) {
parsed = 0;
}
formatter.setMaximumFractionDigits(0);
String formatted = formatter.format(parsed);
current = formatted;
mEditText.setText(formatted);
/* add listener back */
mEditText.addTextChangedListener(this);
/* print a toast when limit is reached... see xml below.
* this is for 6 chars */
if (start == 7) {
Toast toast = Toast.makeText(getApplicationContext(),
"Maximum Limit Reached", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
}
}
}
确保用户不会输入无效信息的一种快速方法是编辑xml。对于我的程序,设置了6个数字字符的限制。
<!-- it says maxLength 8 but it's really 6 digits and a '$' and a ',' -->
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:inputType="number|textVisiblePassword"
android:maxLength="8"
android:digits="0123456789"
android:id="@+id/mEditText"
android:hint="Price"/>
如果不介意删除句点和尾随零,可以执行以下操作:
mEditText.addTextChangedListener(new TextWatcher() {
private String current = "";
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
if (!s.toString().equals(current)) {
annualIncomeEntry.removeTextChangedListener(this);
String cleanString = s.toString().replaceAll("[$,]", "");
if (cleanString.length() > 0) {
double parsed = Double.parseDouble(cleanString);
NumberFormat formatter = NumberFormat.getCurrencyInstance();
formatter.setMaximumFractionDigits(0);
current = formatter.format(parsed);
} else {
current = cleanString;
}
annualIncomeEntry.setText(current);
annualIncomeEntry.setSelection(current.length());
annualIncomeEntry.addTextChangedListener(this);
}
}
@Override
public void afterTextChanged(Editable s) {
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
});
这将把数字格式化程序的最大小数位数设置为零,删除所有尾随的零和句点。我还删除了除法100,以便所有输入的数字都是整数。
还要确保EditText的输入类型为“number”,否则如果用户尝试输入非数字字符,该输入类型将崩溃。
因此,我将以下EditText addTextChangedListener事件处理程序组合在一起,除了需要一些改进外,它运行良好。当我输入时,它会从右到左填充数字。我宁愿它从左到右填充。现在,如果我输入50个it格式为$0.50,当我输入50时,我希望它的格式为$50.00 下面是xml声明和Java代码,请有人告诉我需要做哪些更改才能得到所需的结果。 XML声明 Java代码
问题内容: 我想用JavaScript格式化价格。我想要一个以a 作为参数并返回如下格式的函数: 最好的方法是什么? 问题答案: 好的,根据您的发言,我正在使用此功能: 我乐于接受改进建议(我不愿意仅仅为了做到这一点就不包括YUI :))我已经知道我应该检测到“”。而不只是将其用作小数点分隔符…
在我当前的项目中,我将货币值存储为表示美分数的。但是,当用户在文本字段中输入此值时,他们很可能希望将其输入为十进制值。此外,如果用户不手动输入,我想在前面加上一个美元符号。我如何利用为我完成大部分工作?或者是否有其他解决方案使用预先存在的Swing组件,这样我就不必通过手动编码来重新发明轮子?
我有一个带有一些数值的字符串。 然而,这两者都给出了错误。 实现这种格式的正确途径是什么? 这是jasper report jrxml的一部分,我希望在这里避免报告上出现“null”,从而插入以下代码: 如何解决这一问题? 多谢阅读。
问题内容: 我正在使用我给定的语言环境获取自定义货币格式。但是,这始终包含我不需要的货币符号,我只想要给定语言环境的正确货币数字格式而没有货币符号。 做一个抛出一个异常.. 问题答案: 以下作品。这有点丑陋,但可以履行合同: 您还可以从货币格式中获取模式,删除货币符号,然后从新模式中重构新格式:
问题内容: 我需要从随机整数(0-255)列表中创建一个十六进制数字字符串。每个十六进制数字应由两个字符表示:5-“ 05”,16-“ 10”等。 例: 我设法提出了: 但是,这看起来有点尴尬。有没有更简单的方法? 问题答案: