В ColdFusion существует ли маска numberFormat(), чтобы удалить десятичное число, если оно равно 0?

Я пытаюсь форматировать числа так, чтобы отображалось 2 десятичных знака, если только это не целое число, - тогда я не хочу показывать десятичную точку. Я пробовал 0.00, _.__, 9.99 и несколько комбинаций. Есть ли маска для функции numberFormat, которая может получить этот результат?

Ответ 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.

Ответ 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

и т.д.