代码之家  ›  专栏  ›  技术社区  ›  Kip

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

  •  1
  • Kip  · 技术社区  · 14 年前

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

    4 回复  |  直到 14 年前
        1
  •  1
  •   Pragnesh Vaghela    14 年前

    使用掩码尝试LSNumberFormat()

    #LSNumberFormat(39.7350,"$_.__")# = $39.7350
    
        2
  •  4
  •   Leigh josh poley    14 年前

    我认为没有办法自定义数值函数使用的舍入模式。(尽管我可能是错的)您可能不得不使用java来定制舍入行为

    更新 已经提供了。哦,好吧。也许这个例子对其他人有用。。

    补充 HALF_UP rounding mode 例子

    <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>
    
        3
  •  0
  •   Jean Moniatte    14 年前

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

    LSCurrencyFormat(yourRoundingFunction(39.7450))