B. Money
B. Money

Reputation: 931

how do i format number parsed and passed to editText?

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

Answers (4)

htnamas
htnamas

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

Aviral
Aviral

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

jeet
jeet

Reputation: 29199

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

Upvotes: 0

cosmincalistru
cosmincalistru

Reputation: 1325

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

Upvotes: 1

Related Questions