2010-10-28 3 views
1

Функция LSCurrencyFormat ColdFusion, по-видимому, использует округление до половины (округление банкира). Есть ли способ изменить это? Я бы хотел изменить его на стандартное округло-округленное округление, которое большинство людей обучают в старшей школе.Любой способ изменения метода округления для LSCurrencyFormat в ColdFusion?

Пример:

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

Что вы думаете, что результаты должны быть? – orangepips

+0

@orangepips: Я хотел бы округлить половину округления, такого рода большинство людей преподают в старшей школе. Я отредактирую, чтобы задуматься. – Kip

+0

О, я неправильно понял. Прежде чем добавить этот пример, я подумал, что вы ищете то, что основные маски вам не дали. – Leigh

ответ

1

Try LSNumberFormat() с маской

#LSNumberFormat(39.7350,"$_.__")# = $39.7350 
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> 
0

Почему бы не округлить, прежде чем отправлять значение в LSCurrencyFormat?

LSCurrencyFormat(yourRoundingFunction(39.7450)) 
+0

Надеюсь, что я смогу сделать это по-разному. Если я в Японии, я не хочу ничего после десятичной (так как иены обычно целые) – Kip

Смежные вопросы