通过java.text.DecimalFormat中的数字格式总是SSJS返回错误(Formatti

2019-07-20 13:54发布

我试图格式化使用数量java.text.DecimalFormat的SSJS但它返回一个错误。 这里是我的代码片段。

var df:java.text.DecimalFormat = new java.text.DecimalFormat("000");
df.format(50);

这将返回的错误Ambiguity when calling format(long) and format(double) 。 所以,我试图解析为双或长,但仍是同样的错误数目。

df.format(java.lang.Long.parseLong("50"));     //Returns same error
df.format(java.lang.Double.parseDouble("50")); //Returns same error

我创建了一个Java实现上述SSJS代码,它工作正常。

DecimalFormat df = new DecimalFormat("000"); 
return df.format(50);

我有SSJS代码(以上片段是的一部分),创造了两行新的Java类相当多的线似乎太多精力。 任何人都知道为什么,这并不在SSJS工作?

Answer 1:

@Naveen:你有没有下面的代码尝试,它为我工作,而无需创建任何Java类:)

var df:java.text.DecimalFormat = new java.text.DecimalFormat("000");
var dblNum: java.lang.Double = new java.lang.Double(50);
return df.format(dblNum);

谢谢,请让我知道您对此的意见;)



Answer 2:

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.



文章来源: Formatting number via java.text.DecimalFormat always returns error in SSJS