有什么方法可以更改 ColdFusion 中 LSCurrencyFormat 的舍入方法吗?

发布于 2024-09-29 08:19:53 字数 378 浏览 4 评论 0原文

ColdFusion 的 LSCurrencyFormat 函数似乎使用舍入到半偶数(银行舍入)。有办法改变这个吗?我想将其更改为大多数人在小学所教的标准四舍五入。

示例:

LSCurrencyFormat(39.7340): $39.73
LSCurrencyFormat(39.7350):39.74 美元
LSCurrencyFormat(39.7360): $39.74
LSCurrencyFormat(39.7440): $39.74
LSCurrencyFormat(39.7450):$39.74 <==我希望这是 $39.75
LSCurrencyFormat(39.7460): $39.75

ColdFusion's LSCurrencyFormat function appears to be using round-to-half-even (banker's rounding). Is there anyway to change this? I'd like to change it to standard round-half-up rounding that most people are taught in grade school.

An example:

LSCurrencyFormat(39.7340): $39.73
LSCurrencyFormat(39.7350): $39.74
LSCurrencyFormat(39.7360): $39.74
LSCurrencyFormat(39.7440): $39.74
LSCurrencyFormat(39.7450): $39.74 <== I want this to be $39.75
LSCurrencyFormat(39.7460): $39.75

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

若有似无的小暗淡 2024-10-06 08:19:53

我认为没有办法自定义数字函数使用的舍入模式。 (虽然我可能是错的)您可能必须深入研究java来定制舍入行为

更新我的错误。我认为需要的是一些基本面具尚未提供的东西。那好吧。也许这个例子对某人还是有用的..

更新添加了HALF_UP 舍入模式 示例

(注意:区域设置处理既快又脏。我确信有一种更优雅的方法来做到这一点..)

<cfset Locale = createObject("java", "java.util.Locale")>
<cfset Mode = createObject("java", "java.math.RoundingMode")>
<cfset Formatter = createObject("java", "java.text.NumberFormat").getCurrencyInstance(Locale.US)>
<cfset Formatter.applyPattern("$######,######.####")>
<cfset input = LSParseNumber("39.735", "en_US")>
Input <cfoutput>#input#<br></cfoutput>
<cfset Formatter.setRoundingMode( Mode.HALF_EVEN )>
HALF_EVEN <cfoutput>#Formatter.format(input)#<br></cfoutput>
<cfset Formatter.setRoundingMode( Mode.HALF_DOWN )>
HALF_DOWN <cfoutput>#Formatter.format(input)#<br></cfoutput>
<cfset Formatter.setRoundingMode( Mode.HALF_UP )>
HALF_UP <cfoutput>#Formatter.format(input)#<br></cfoutput>

I do not think there is a way to customize the rounding mode used by the numeric functions. (Though I could be wrong) You may have to dip into java for customized rounding behavior

Update My mistake. I thought the need was for something basic masks did not already provide. Oh, well. Maybe this example will be useful to someone anyway ..

Update Added HALF_UP rounding mode example

(Note: The Locale handling is quick and dirty. I am sure there is a more elegant way of doing it..)

<cfset Locale = createObject("java", "java.util.Locale")>
<cfset Mode = createObject("java", "java.math.RoundingMode")>
<cfset Formatter = createObject("java", "java.text.NumberFormat").getCurrencyInstance(Locale.US)>
<cfset Formatter.applyPattern("$######,######.####")>
<cfset input = LSParseNumber("39.735", "en_US")>
Input <cfoutput>#input#<br></cfoutput>
<cfset Formatter.setRoundingMode( Mode.HALF_EVEN )>
HALF_EVEN <cfoutput>#Formatter.format(input)#<br></cfoutput>
<cfset Formatter.setRoundingMode( Mode.HALF_DOWN )>
HALF_DOWN <cfoutput>#Formatter.format(input)#<br></cfoutput>
<cfset Formatter.setRoundingMode( Mode.HALF_UP )>
HALF_UP <cfoutput>#Formatter.format(input)#<br></cfoutput>
平生欢 2024-10-06 08:19:53

尝试使用掩码 LSNumberFormat()

#LSNumberFormat(39.7350,"$_.__")# = $39.7350

Try LSNumberFormat() with a mask

#LSNumberFormat(39.7350,"$_.__")# = $39.7350
情独悲 2024-10-06 08:19:53

为什么在将值发送到 LSCurrencyFormat 之前不进行舍入?

LSCurrencyFormat(yourRoundingFunction(39.7450))

Why not round before you send the value to the LSCurrencyFormat?

LSCurrencyFormat(yourRoundingFunction(39.7450))
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文