3

我正在尝试使用java.text.DecimalFormatSSJS 格式化数字,但它返回错误。这是我的代码片段。

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

这将返回一个错误Ambiguity when calling format(long) and format(double)。所以我尝试将数字解析为 double 或 long 但仍然是相同的错误。

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

我创建了上述 SSJS 代码的 Java 实现,它运行良好。

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

我有好几行 SSJS 代码(上面的代码片段是其中的一部分),为两行创建一个新的 Java 类似乎太费力了。任何人都知道为什么这在 SSJS 中不起作用?

4

2 回答 2

3

它不起作用,因为 SSJS 无法区分 double 和 float 之间的区别(这是设计使然 - javascript 只有 64 位精度的数字概念)。

你可以用反射破解这个:

var df:java.text.DecimalFormat = new java.text.DecimalFormat("000");
df.getClass().getMethod("format", Double.class).invoke(df, 50);

但我宁愿为此目的创建一些自定义的 java utils 类。除了调用 java 之外,SSJS 几乎对任何事情都很糟糕。

于 2013-02-26T11:52:35.500 回答
2

@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);

谢谢,请让我知道您对此的评论;)

于 2013-08-22T06:44:37.793 回答