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 的答案时,它看起来非常相似。希望其中之一对您有用。
我正在尝试摆脱作为 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 的答案时,它看起来非常相似。希望其中之一对您有用。