xpages - 摆脱货币的一小部分

时间:2016-01-27 11:53:20

标签: xpages lotus-domino

我正在尝试将存储在Notes文档中的字段的小数部分删除为Number字段。在xPages中,它将默认显示为Double,然后我想将其转换为Currency。当我使用标准货币转换器时,我无法摆脱小数部分。

我尝试将Double转换为显示Integer Only,并以编程方式将Double转换为intValue。这个工作正常,只要我不使用货币转换器,似乎无论如何添加分数。我想这是因为default fractionpart是2。

我猜一个重要的线索是我在谈论瑞典货币。 在瑞典,我们以这种模式显示货币:# ### ### kr。 标点符号作为空格,货币符号在数字后面。

我试图像上面的例子一样使用Custom Converter - Pattern但是我没有得到正确的标点符号。 所以 - 我想要实现的是: Example: 112 000 kr 代码示例将返回:112 000,00 kr

当然我可以做一个字符串Conversion-concatenation operation来实现这个目标,但最好的方法是有一种方法来获取CurrencyCode的default fraction part并操纵它......? 对我而言似乎是bug因为"Display Integer Only"似乎被忽视了。

也许我找不到pattern conversion,我可以使用?

代码示例:

<xp:inputText value="#{document1.totSumCost}" id="totSumCost1">
        <xp:this.converter>
            <xp:convertNumber type="currency" currencySymbol="kr" currencyCode="SEK" integerOnly="true" maxFractionDigits="0">
            </xp:convertNumber>
        </xp:this.converter>
</xp:inputText>

我“有点”以这种有点令人不安的方式解决了这个问题:

<xp:inputText value="#{document1.totSumCost}"
                    id="inputText2">
                        <xp:this.converter>
                <xp:convertNumber type="currency" integerOnly="true"
                    locale="sv" maxFractionDigits="0" currencySymbol=" ">
                </xp:convertNumber>
            </xp:this.converter>
                </xp:inputText>
                <xp:text escape="true" id="computedField6">
                    <xp:this.value><![CDATA[#{javascript:return " kr"}]]></xp:this.value>
                </xp:text>

2 个答案:

答案 0 :(得分:2)

使用自定义转换器:

123456789.12

它将数字转换为瑞典货币格式,如
123 456 789 kr - &gt; parseInt()
并将其解析回浮动状态。

如果您想将值保存为整数,请使用parseFloat()代替{{1}}。

答案 1 :(得分:0)

的Anders,

我一直在努力解决同样的问题。我尝试了一切,但无法使用数字类型找到优雅的解决方案。我最终刚刚创建了一个自定义转换器,将其更改为字符串。

function numberWithCommas (x) {

var parts = x.toString().split(".");
parts[0] = parts[0].replace(/\B(?=(\d{3})+(?!\d))/g, ",");
return parts.join(".");
}

以下是我们在整个应用程序中使用的功能。

class FooA_for_FooB
{
public:
    virtual void Hello() = 0;
    virtual void Hello2() = 0;
};

class FooA : public FooA_for_FooB
{
private: /* make them private */
    void Hello() override;
    void Hello2() override;
private:
    void Hello3();
    int m_iData;
};

class FooB
{
    void fun()
    {
        FooA objA;
        FooA_for_FooB &r = objA;
        r.Hello()  // right
        r.Hello2() // right
        objA.Hello3() // compile error
        objA.m_iData = 0; // compile error
    }
};

class FooC
{
    void fun()
    {
        FooA objA;
        objA.Hello()  // compile error
        objA.Hello2() // compile error
        objA.Hello3() // compile error
        objA.m_iData = 0; // compile error
    }
};

我希望这会有所帮助。当我写作克努特的答案时,看起来非常相似。希望其中一个适合你。