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
答案 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)