I am trying to format a number using java.text.DecimalFormat in SSJS but it returns an error. Here is my code snippet.
var df:java.text.DecimalFormat = new java.text.DecimalFormat("000");
df.format(50);
This returns an error of Ambiguity when calling format(long) and format(double). So I tried to parse the number as double or long but still the same error.
df.format(java.lang.Long.parseLong("50")); //Returns same error
df.format(java.lang.Double.parseDouble("50")); //Returns same error
I created a Java implementation of the above SSJS code and it works fine.
DecimalFormat df = new DecimalFormat("000");
return df.format(50);
I have quite a few lines of SSJS code (of which the above snippet is part of) and creating a new Java class for two lines seems too much effort. Anyone knows why this doesn't work in SSJS?
It does not work because SSJS cannot tell the difference between double and float (this is by design - javascript has only concept of number with 64 bit precision).
You can probably hack this with reflection:
var df:java.text.DecimalFormat = new java.text.DecimalFormat("000");
df.getClass().getMethod("format", Double.class).invoke(df, 50);
But I would rather create some custom java utils classes for this purpose. SSJS is awful for almost anything except for calling java.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With