如何使用自定义转换器将数字结果格式化为字符串

时间:2013-03-11 10:19:51

标签: xpages

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

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

我的代码如下所示:

的getAsObject()

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()中获取值的正确数据类型。

对于那些看过/评论过我之前的问题的人,我再次坚持这些“本地化问题”......

请咨询

/ M

1 个答案:

答案 0 :(得分: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)的错误。 I have bitten by this before

<强>更新

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

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

您可以根据自己的要求为方法添加参数。