Reputation: 931
I am having an issue formatting numbers in an editText. I want users to be able to enter a number as either an positive or negative integer (5 or -5) and for it to format a as decimal (.05). Currently, it is formatting as .05.0 instead .05 and i can't figure out why. Also if the user enters erroneous text or leaves the field blank i want to set the editText to "0". However, I get an error instead. Any help greatly appreciated.
public void checkPremium(){
double number = Double.parseDouble(premium.getText().toString());
if(premium.getText().toString().equals(".")||premium.getText().toString().equals("-.")||premium.getText().toString().equals("")){
premium.setText("0");
}else if(number >= 1 || number < 10){
premium.setText(".0"+number);
}else if(number >= 10){
premium.setText("."+number);
}else if(number <= -1 || number > -10){
premium.setText(".0"+Math.abs(number));
}else if(number <= -10){
premium.setText("."+Math.abs(number));
}else if(number <1 || number >0){
//Do Nothing
}
}
Upvotes: 2
Views: 370
Reputation: 59
It's better to use try and catch blocks if you don't want any other erroneous characters or empty spaces in the edittext field
Here is the code and hope you will find it useful.
try{
number = Double.parseDouble(premium.getText().toString());
if(number >= 1 || number < 10){
premium.setText(String.valueOf(.01*number));
}else if(number >= 10){
premium.setText(String.valueOf(.1*number));
}else if(number <= -1 || number > -10){
premium.setText(String.valueOf(0.01*Math.abs(number)));
}else if(number <= -10){
premium.setText(String.valueOf(0.1*Math.abs(number)));
}else if(number <1 || number >0){
//Do Nothing
}
}catch(Exception e)
{
premium.setText("0");
}
Upvotes: 0
Reputation: 1141
Simpler code would be:
Double number = Double.parseDouble(premium.getText().toString());
if (number.isInfinite() || number.isNan()) number = 0F;
premium.setText(String.format("%.2f", Math.abs(number)/100);
Hope this helps...
Upvotes: 0
Reputation: 29199
Use Decimal Formatter or string specifiers. check following answer.: How to print a double with two decimals in Android?
Upvotes: 0
Reputation: 1325
The Double parser adds ".0" to your number. you better add your String and not your parsed double.
Upvotes: 1