Quantcast
Channel: SmartClient Forums
Viewing all articles
Browse latest Browse all 4756

We cannot format large numbers of type Double

$
0
0
I am using:
* SmartClient Version: v8.3p_2013-04-23/PowerEdition Deployment (built 2013-04-23)
* Firefox version 11.0

Our application expects users to enter large decimal values; for example 21 digits before the decimal point and 9 digits after it. We need to convert these large numbers to include thousand separators; e.g. a user enters “1234567891234567890.1234567” and we convert it to “12,345,678,901,234,567,890.1234567”. We use setEditorValueFormatter and setEditorValueParser; these are replicated in the example code below. However, when we enter a value that is bigger than the maximum a Long can hold (i.e. 2^63 – 1, or 9223372036854775807), the value is set to this maximum + 1. To give you an example, we entered 12345678901234567890 (see attached screenshot fig1.png) and the formatter changed it to 9,223,372,036,854,775,808.00 (see attached screenshot fig2.png).
Is there a fault in SGWT whereby a large number is always passed to the Formatter as a Long rather than a Double?
Your help in this matter will be greatly appreciated.
Many thanks.

Code:

package com.tracefinancial.myApp.client;

import com.google.gwt.core.client.EntryPoint;
import com.google.gwt.i18n.client.NumberFormat;
import com.smartgwt.client.data.Record;
import com.smartgwt.client.widgets.form.*;
import com.smartgwt.client.widgets.form.fields.FormItem;
import com.smartgwt.client.widgets.form.fields.TextItem;

/**
 * TODO
 * @author INSERT USERNAME INTO TEMPLATE HERE
 */
public class GPTest implements EntryPoint {

  public void onModuleLoad() {

    DynamicForm frm = new DynamicForm();

    final NumberFormat fmt = NumberFormat.getFormat("#,##0.00");

    TextItem money = new TextItem("MyMoney");
    money.setWidth(200);

    money.setEditorValueFormatter(new FormItemValueFormatter() {
      @Override
      public String formatValue(Object value, Record record, DynamicForm dynamicForm,
                                FormItem formItem) {
        if (value == null) {
          return null;
        } else {
          try {
            if (value instanceof Integer) {
              return fmt.format((Integer)value);
            } else {
              return fmt.format(Double.valueOf(value.toString()));
            }
          }
          catch (NumberFormatException ignore) {
            return value.toString();
          }
        }
      }
    });

    money.setEditorValueParser(new FormItemValueParser() {
      @Override
      public Object parseValue(String value, DynamicForm form, FormItem item) {
        if (value == null || value.isEmpty()) {
          return null;
        } else {
          try {
            return fmt.parse(value);
          }
          catch (NumberFormatException ignore) {
            return value;
          }
        }
      }
    });

    TextItem nextField = new TextItem("nextField");
    nextField.setWidth(200);
    frm.setFields(money, nextField);
    frm.show();
  }
}


Attached Images
File Type: png fig1.png (1.8 KB)
File Type: png fig2.png (2.0 KB)

Viewing all articles
Browse latest Browse all 4756

Trending Articles