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 コード (上記のスニペットはその一部です) があり、2 行分の新しい 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 クラスをいくつか作成したいと思います。SSJS は、Java の呼び出しを除いて、ほとんど何に対してもひどいものです。

于 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 に答える