Java android中的格式编号0.000
我正在尝试使用以下方法将我的数字从1000000格式化为1.000.000,并将数字(如102)格式化为10,2:Java android中的格式编号0.000,java,android,number-formatting,Java,Android,Number Formatting,我正在尝试使用以下方法将我的数字从1000000格式化为1.000.000,并将数字(如102)格式化为10,2: public class NumberTextWatcher implements TextWatcher { private DecimalFormat df; private DecimalFormat dfnd; private boolean hasFractionalPart; private EditText et; pub
public class NumberTextWatcher implements TextWatcher {
private DecimalFormat df;
private DecimalFormat dfnd;
private boolean hasFractionalPart;
private EditText et;
public NumberTextWatcher(EditText et)
{
df = new DecimalFormat("#.###,##");
df.setDecimalSeparatorAlwaysShown(true);
dfnd = new DecimalFormat("#,###");
this.et = et;
hasFractionalPart = false;
}
@SuppressWarnings("unused")
private static final String TAG = "NumberTextWatcher";
@Override
public void afterTextChanged(Editable s)
{
et.removeTextChangedListener(this);
try {
int inilen, endlen;
inilen = et.getText().length();
String v = s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()), "");
Number n = df.parse(v);
int cp = et.getSelectionStart();
if (hasFractionalPart) {
et.setText(df.format(n));
} else {
et.setText(dfnd.format(n));
}
endlen = et.getText().length();
int sel = (cp + (endlen - inilen));
if (sel > 0 && sel <= et.getText().length()) {
et.setSelection(sel);
} else {
et.setSelection(et.getText().length() - 1);
}
} catch (NumberFormatException nfe) {
} catch (ParseException e) {
}
et.addTextChangedListener(this);
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after)
{
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count)
{
if (s.toString().contains(String.valueOf(df.getDecimalFormatSymbols().getDecimalSeparator())))
{
hasFractionalPart = true;
} else {
hasFractionalPart = false;
}
}
}
公共类NumberTextWatcher实现TextWatcher{
专用分码格式df;
私有决策格式dfnd;
私有布尔部分;
私人编辑;
公用号码ExtWatcher(编辑文本et)
{
df=新的十进制格式(“#.###,##,##”);
df.setDecimalSeparatorAlwaysShown(真);
dfnd=新的十进制格式(“#,####”);
this.et=et;
hasstatilpart=false;
}
@抑制警告(“未使用”)
私有静态最终字符串标记=“NumberTextWatcher”;
@凌驾
公共无效后文本已更改(可编辑)
{
et.removeTextChangedListener(此);
试一试{
内伊尼伦,恩德伦;
inilen=et.getText().length();
String v=s.toString().replace(String.valueOf(df.getDecimalFormatSymbols().getGroupingSeparator()),“”);
数字n=df.parse(v);
int cp=et.getSelectionStart();
if(hasstatilpart){
et.setText(df.format(n));
}否则{
et.setText(dfnd.format(n));
}
endlen=et.getText().length();
int sel=(cp+(endlen-inilen));
如果(sel>0&&sel您收到此异常,因为您使用的设备的区域设置与您使用的掩码不匹配
运行此程序以查看当前区域设置的默认掩码:
import java.text.DecimalFormat;
import java.text.NumberFormat;
public class Test
{
public static void main(String[] args)
{
NumberFormat nf = NumberFormat.getNumberInstance();
DecimalFormat df = (DecimalFormat)nf;
String output = df.format(123456789.01);
System.out.println(output);
}
}
然后使用使用该掩码的区域设置应用所需的掩码。这适用于德国:
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
public class Test
{
public static void main(String[] args)
{
NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMANY);
DecimalFormat df = (DecimalFormat)nf;
String output = df.format(123456789.01);
System.out.println(output);
}
}
输出为123.456.789,01
这里的完整详细信息:你能告诉我如何使用android版java格式实现你的代码吗?这是一样的。你在android上也有Locale。只是不是主要方法:),但我不知道如何在android中调用Locale来实现我的十进制格式:(Locale current=getResources().getConfiguration().locale;很抱歉我没有及时回复,不,这对我没有帮助:(我认为你必须使用locale来实现这一点。
import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;
public class Test
{
public static void main(String[] args)
{
NumberFormat nf = NumberFormat.getNumberInstance(Locale.GERMANY);
DecimalFormat df = (DecimalFormat)nf;
String output = df.format(123456789.01);
System.out.println(output);
}
}