xpages - 去掉货币的小数部分

xpages - Get rid of the fraction part of a currency

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

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

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

我试过像上面的例子那样使用 Custom Converter - Pattern,但后来我的标点符号不正确。 所以 - 我想要实现的是: Example: 112 000 kr 代码示例将 return 这样:112 000,00 kr

当然我可以做一个 String 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>

我"sort of"自己用这种有点令人不安的方式解决了这个问题:

<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>

使用自定义转换器:

<xp:this.converter>
    <xp:customConverter>
        <xp:this.getAsString><![CDATA[#{javascript:
            value.toFixed(0).replace(/(\d)(?=(\d{3})+(?!\d))/g, " ") + " kr"
            }]]></xp:this.getAsString>
        <xp:this.getAsObject><![CDATA[#{javascript:
            parseFloat(value.replace(" ", ""))
            }]]></xp:this.getAsObject>
    </xp:customConverter>
</xp:this.converter>

它将数字转换为瑞典货币格式,如
123456789.12 --> 123 456 789 kr
并将其解析回浮动。

如果您想将值保存为整数,请使用 parseInt() 而不是 parseFloat()

安德斯,

我也遇到过同样的问题。我尝试了一切,但找不到使用数字类型的优雅解决方案。我最终只是创建了一个自定义转换器,将其更改为字符串。

<xp:this.converter>
   <xp:customConverter  getAsObject="#{javascript:value}">
   <xp:this.getAsString><![CDATA[#{javascript:try{
       return "$" + numberWithCommas(value.toString());
   } catch(e){
       logError(e)
   }}]]></xp:this.getAsString>
   </xp:customConverter>
</xp:this.converter>

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

function numberWithCommas (x) {

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

希望对您有所帮助。当我正在撰写 Knut 的答案时,它看起来非常相似。希望其中之一对您有用。