Я пытаюсь форматировать числа так, чтобы отображалось 2 десятичных знака, если только это не целое число, - тогда я не хочу показывать десятичную точку. Я пробовал 0.00
, _.__
, 9.99
и несколько комбинаций. Есть ли маска для функции numberFormat
, которая может получить этот результат?
В ColdFusion существует ли маска numberFormat(), чтобы удалить десятичное число, если оно равно 0?
Ответ 1
<cfif int(x) eq x>
#int(x)#
<cfelse>
#DecimalFormat(x)#
</cfif>
Ответ 2
Я не думаю, что существует существующая функция, но этот пример округления может сделать трюк:
round(yourNumber * 100) / 100
EDIT:
Как упоминал JasonM в комментариях, это не приведет к созданию двух знаков после запятой для чисел типа 1.1
.
Ответ 3
Вы можете разделить переменную на 1, а затем показать все число без десятичной точки.
<cfset a = 5.00>
<cfset b = 5.55>
<cfoutput>#a/1#, #b/1#</cfoutput>
Вывод 5, 5.55
. Вместо 5.00, 5.55
, если вы не разделите на 1.
Ответ 4
Все еще супер грубо. WTF Adobe?
#REReplace(REReplace(DecimalFormat(value), "0+$", "", "ALL"), "\.+$", "")#
кредит: http://www.webveteran.com/blog/web-coding/coldfusion/trimming-a-decimal-with-coldfusion-regex/
Ответ 5
Я предпочитаю свой код как плоский, как блин и стараюсь избегать условностей, когда это возможно. Поэтому, если вам удобно понижать уровень до Java, вы можете использовать DecimalFormat, чтобы получить нужные результаты.
<cfset n = JavaCast("double", 1.0) />
<cfset x = CreateObject("java", "java.text.DecimalFormat").init() />
<cfset x.applyPattern("##.##") />
<cfset y = x.format(n) />
Также будет работать следующий лайнер.
<cfset y = CreateObject("java", "java.text.DecimalFormat").init( "##.##" ).format( JavaCast("double", 1.0) ) />
Ответ 6
Хорошо, я знаю, что этот вопрос - это годы, и мое решение глупо, но это сработало для моих нужд:
#replace(dollarformat(list_price), '.00', '')#
Я знаю, что это был формат доллара, а не формат номера, но концепция одинаков.
LOL. Если он немой и работает он не тупой, верно?
Ответ 7
Я бы использовал precisionEvaluate() + numberFormat() + replaceFirst (regex)
<cfscript>
numberFormat( precisionEvaluate( num ), '_.00' ).replaceFirst( '\.00$', '' );
</cfscript>
Например:
50.00 -> 50
0.00 -> 0
0.001 -> 0
0.006 -> 0.01
123.45 -> 123.45
4/3 -> 1.33
5.24596 -> 5.25
pi() -> 3.14
12345678901234567890 -> 12345678901234567000
Ответ 8
Я знаю, что это были возрасты, но если вы сначала сделаете Numberformat этого значения, то Trim it, вы получите желаемый результат... NumberFormat делает его завершающим числом после десятичного числа - TRIM удалит конечные десятичные числа, если они просто нули.
5.55 приведет к 5,55, 5,00 приведет к 5, 5.5 приведет к 5.5
и т.д.