title: Want to format numbers greater than 20 digits in java?
body: <p>I want to format number with commas which are greater than 20 digits in Android. I used <code>DecimalFormat</code> class and <code>TextWatcher</code> on <code>EditText</code> but the problem is when I enter the number greater than 20 digits it shows 0 after 20 digits rather than number.<br>
  It works fine till 20 digits.<br>
  Any Help should be appreciated.Thanks in Advance</p>
  
  <pre><code>private 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 &gt; 0 &amp;&amp; sel &lt;= et.getText().length()) {
  
                  et.setSelection(sel);
              } else {
                  // place cursor at the end?
                  et.setSelection(et.getText().length() - 1);
              }
          } catch (NumberFormatException nfe) {
              // do nothing?
          } catch (ParseException e) {
              // do nothing?
          }
  
          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;
          }
      }
  
  }
  </code></pre>