Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Limiting Number of Decimal Places in GWT?

In pure Java, I would normally have a function like the one below for limiting the number of decimal places to decimalCount for a given number value. However, according to the GWT docs, "GWT does not provide full emulation for the date and number formatting classes (such as java.text.DateFormat, java.text.DecimalFormat, java.text.NumberFormat, and java.TimeFormat)." What would one do to the following function in order to make it work in GWT?

public static String getFormatted(double value, int decimalCount) { 
    DecimalFormat decimalFormat = new DecimalFormat();
    decimalFormat.setMaximumFractionDigits(decimalCount);
    return decimalFormat.format(value);
}
like image 760
Chris Cashwell Avatar asked Aug 27 '11 11:08

Chris Cashwell


3 Answers

Check out NumberFormat (com.google.gwt.i18n.client.NumberFormat) in the GWT Javadoc.

I've never used it but I see this example in there:

// Custom format
value = 12345.6789;
formatted = NumberFormat.getFormat("000000.000000").format(value);
// prints 012345.678900 in the default locale
GWT.log("Formatted string is" + formatted);

So this should work for you.

Update

This method provides the same functionality as the one in your question. I went ahead and asked for the most efficient way to go about this, see that question here. (Sorry this answer has been edited so much - it was just bugging me)

public static String getFormatted(double value, int decimalCount) {
    StringBuilder numberPattern = new StringBuilder(
            (decimalCount <= 0) ? "" : ".");
    for (int i = 0; i < decimalCount; i++) {
        numberPattern.append('0');
    }
    return NumberFormat.getFormat(numberPattern.toString()).format(value);
}

Alternatives include using a set amount of "0"'s and using substring to pull out the required pattern as @Thomas Broyer mentioned in the comments.

like image 135
Jay Avatar answered Sep 21 '22 11:09

Jay


You can use

NumberFormat decimalFormat = NumberFormat.getFormat(".##");

from GWT library which will render for example 1234.789789 to 1234.78

You can find a full working example here: http://gwt.google.com/samples/Showcase/Showcase.html#!CwNumberFormat

like image 9
Andrei T Avatar answered Sep 19 '22 11:09

Andrei T


In current GWT (2.5, 2.6), there is now:

private final NumberFormat numberFormat = NumberFormat.getDecimalFormat();

System.out.println(numberFormat.format(myFloat));

Edit: added GWT versions per request

like image 1
user3561002 Avatar answered Sep 20 '22 11:09

user3561002