2

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
         }       
 }
B. Money
  • 883
  • 2
  • 18
  • 56

4 Answers4

1

The Double parser adds ".0" to your number. you better add your String and not your parsed double.

cosmincalistru
  • 1,193
  • 7
  • 20
0

Use Decimal Formatter or string specifiers. check following answer.: How to print a double with two decimals in Android?

Community
  • 1
  • 1
jeet
  • 27,861
  • 6
  • 48
  • 52
0

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...

Aviral
  • 1,131
  • 1
  • 10
  • 16
0

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");
             }
htnamas
  • 61
  • 2
  • 5