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

时间:2010-10-28 12:47:51

标签: coldfusion rounding currency

ColdFusion的LSCurrencyFormat函数似乎使用了round-to-even-even(银行家的舍入)。反正有改变吗?我想把它改成标准的圆形半圆形,大多数人都是在小学里教的。

一个例子:

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

4 个答案:

答案 0 :(得分:4)

我认为没有办法自定义数字函数使用的舍入模式。 (虽然我可能错了)你可能不得不深入研究java的自定义舍入行为

更新我的错误。我认为需要的是已经提供的基本面具。那好吧。也许这个例子对某人有用..

更新添加了HALF_UP rounding mode示例

(注意:Locale处理快速而且很脏。我相信有一种更优雅的方式可以做到这一点。)

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

答案 1 :(得分:1)

尝试使用掩码

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

答案 2 :(得分:0)

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

LSCurrencyFormat(yourRoundingFunction(39.7450))

答案 3 :(得分:0)