Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
421 views
in Technique[技术] by (71.8m points)

xpages - Formatting number via java.text.DecimalFormat always returns error in SSJS

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?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...