1

在我的表单中,我有四个需要计算的字段,结果显示在最后一个名为 PaymentAmount 的字段中。建议我为 PaymentAmount 使用自定义转换器,因为我只需要在 PaymentAmount 上进行部分刷新,以便在其他四个字段上的 onchange 事件。

这很好用,但我的问题是结果格式错误。

我的代码如下所示:

获取对象()

try {
    var transCode = getComponent("TransactionCode").getValue();
    var nominal = getComponent("Nominal").getValue();
    var price = getComponent("Price").getValue();
    var qFactor =  getComponent("QuoteFactor").getValue()||1;
    var fee1= getComponent("Fee1").getValue()||0;
    var fee2= getComponent("Fee2").getValue()||0;
    var fee3= getComponent("Fee3").getValue()||0;
    var feeTotal = fee1+fee2+fee3;

    var paymentAmount = nominal * (price * qFactor);
    if(transCode == "Buy") {
        paymentAmount+=feeTotal;
    } else if(transCode == "Sell") {
        paymentAmount -= feeTotal;
    } else return 0;

    return paymentAmount;
} catch(e){
    dBar.error(e);
}

getAsString()

return value.toString();

我尝试使用 java 中所有可用的方法和对象来格式化结果,例如: String.format("%.2f", value); 但失败了。

如果我根据我的语言环境输入我的值 10000*1,44+1,2 = 14401,2 但在 PaymentAmount 中显示的结果是 14401.2。我希望它根据我的语言环境 14001,2 显示。

例如,如果我在 getAsString() 中使用以下内容,则会收到此错误:

try {
    var val = java.lang.String.format("%.2f",value);

} catch(e) { dBar.error(e); }

com.ibm.jscript.InterpretException: Script interpreter error, line=2, col=28: Java method 'format(string, number)' on java class 'java.lang.String' not found

我无法为 getAsString() 中的值获取正确的数据类型。

对于已经看到/评论过我之前的问题的您,我再次被这些“本地化问题”所困扰......

请指教

/米

4

1 回答 1

2

您可以使用此 Java 代码在您的语言环境中获取号码:

import java.text.NumberFormat;
import java.util.Locale;
...
...
Locale swedishLocale = new Locale("sv", "SE"); // Locale for Sweden
NumberFormat nf = NumberFormat.getInstance(swedishLocale);
return nf.format(14401.2);

这将返回14 401,2。不要尝试将其转换为 SSJS,否则会出现Ambiguity when calling format(long) and format(double). 我以前被这个咬过

更新

您可以使用静态方法创建一个类,该方法在您的语言环境中格式化日期。

package pkg;
import java.text.NumberFormat;
import java.util.Locale;
public class Utilities {
    public static String formatString() {
        Locale swedishLocale = new Locale("sv", "SE");
        NumberFormat nf = NumberFormat.getInstance(swedishLocale);
        return nf.format(14401.2);
    }
}

然后您可以通过以下方式在 SSJS 中调用此方法:

var formattedNumber = pkg.Utilities.formatString();

您可以根据需要为方法添加参数。

于 2013-03-11T11:11:10.150 回答