我正在开发一个关于某些计算的应用程序。在选项卡上我有3个edittexts。一个用于价格输入的edittext,一个用于它的百分比,最后一个用于它们的结果。但是我得到了使这些edittexts显示为货币的任务(我使用的是十进制格式)。现在我只能将结果显示为货币。价格输入也需要是十进制格式,但不知怎的,我的代码不会工作(这是一个糟糕的,非常糟糕的实现)。我们的想法是将diplayed值设为十进制格式,同时计算此值,结果也将显示在edittext结果框中。我的进一步任务是让这三个edittext自动生成,因为用户在任何地方输入值(可能只在价格edittext和百分比或结果和价格edittext上),例如:
Price edittext:
100000
Percentage
30
Result:
this will be 30000 (auto generate itself(means it fill itself with that value))
或
Price edittext
100000
Percentage:
this will be 30(auto generate itself(means it fill itself with that value))
Result
30000
我能够使用textwatcher完成第一个,这个代码:
edittextforprice.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
String text1 = edittextforprice.getText().toString();
String text2 = percentageoftheprice.getText().toString();
double input1 = 0;
double input2 = 0;
if (text1.length() > 0)
input1 = Double.valueOf(text1);
if (text2.length() > 0)
input2 = Double.valueOf(text2);
if (text1.length() != 0) {
double output = (input1 * input2) / 100;
e = kursIndonesia.format(output);
outputtumbal = e;
edittextresult.setText("" + e);
} else if (text2.length() == 0) {
edittextresult.setText("");
}
}
避免错误我也在textwatcher百分比上添加上面的代码,所以当用户编辑输入时,应用程序不会崩溃(例如擦除所有输入数据,或者它变为零)
这个转换器,我把它放在onCreate
final DecimalFormat kursIndonesia = (DecimalFormat) DecimalFormat
.getCurrencyInstance();
DecimalFormatSymbols formattedStuff = new DecimalFormatSymbols();
formattedStuff.setCurrencySymbol("Rp. ");
formattedStuff.setMonetaryDecimalSeparator(',');
formattedStuff.setGroupingSeparator('.');
kursIndonesia.setDecimalFormatSymbols(formattedStuff);
结果edittext将显示结果:
Result:
Rp. 30.000,00
是否可以使用此
final DecimalFormat kursIndonesia = (DecimalFormat) DecimalFormat
.getCurrencyInstance();
DecimalFormatSymbols formattedStuff = new DecimalFormatSymbols();
formattedStuff.setCurrencySymbol("Rp. ");
formattedStuff.setMonetaryDecimalSeparator(',');
formattedStuff.setGroupingSeparator('.');
kursIndonesia.setDecimalFormatSymbols(formattedStuff);
和这个
DecimalFormat dec1 = new DecimalFormat();
dec1.setGroupingUsed(false);
在上面的textwatcher代码中我想在显示器上将给定值(用户输入)转换为十进制,但是这个值也将在上面的textwatcher中计算。我这样做了
edittextforprice.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
String text1 = ethint1.getText().toString();
DecimalFormat kursIndonesia1 = (DecimalFormat) DecimalFormat
.getCurrencyInstance();
DecimalFormatSymbols formattedStuff1 = new DecimalFormatSymbols();
formattedStuff1.setCurrencySymbol("Rp. ");
formattedStuff1.setMonetaryDecimalSeparator(',');
formattedStuff1.setGroupingSeparator('.');
kursIndonesia1.setDecimalFormatSymbols(formattedStuff1);
if (text1.length() != 0) {
//long lol = Long.parseLong(text1);
e = kursIndonesia1.format(text1);
ethint1.setText("" + e);
}
}
}
将给定值转换为货币但不起作用,我也试过了:
edittextforprice.addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before,
int count) {
DecimalFormat dec = new DecimalFormat();
dec.setGroupingUsed(false);
String text1 = edittextforprice.getText().toString();
String text2 = edittextpercentage.getText().toString();
String a1 = null;
double input1 = 0;
double input2 = 0;
if (text1.length() > 0)
a1 = dec.format(text1);
input1 = Double.valueOf(text1);
if (text2.length() > 0)
input2 = Double.valueOf(text2);
if (text1.length() != 0) {
a1 = dec.format(text1);
input1 = Long.parseLong(a1);
double output = (input1 * input2) / 100;
e = kursIndonesia.format(output);
outputtumbal = e;
textvDP1.setText("" + e);
} else if (text2.length() == 0) {
textvDP1.setText("");
}
}
这也不行,如何正确实现我的想法? 提前致谢