Как отформатировать валюту в HTML5 с помощью тимелеафа

Я застрял с форматированием валюты в HTML 5. У меня есть приложение, в котором я должен форматировать валюту. У меня есть фрагмент кода ниже

 <td class="right"><span th:inline="text">$ [[${abc.value}]]</span></td>

Где из DAO abc я читаю значение валюты, оно должно быть отформатировано. В настоящее время печатается 1 200 000,0 долларов США, должно быть напечатано 1 200 000,0 долларов США.


person giri    schedule 04.01.2013    source источник


Ответы (4)


Вы можете использовать служебный объект #numbers, методы которого вы можете увидеть здесь: http://www.thymeleaf.org/apidocs/thymeleaf/2.0.15/org/thymeleaf/expression/Numbers.html

Например:

<span th:inline="text">$ [[${#numbers.formatDecimal(abc.value, 0, 'COMMA', 2, 'POINT')}]]</span>

Тем не менее, вы также можете сделать это без встраивания (что является рекомендуемым способом тимелеафа):

<td>$ <span th:text="${#numbers.formatDecimal(abc.value, 0, 'COMMA', 2, 'POINT')}">10.00</span></td>
person Daniel Fernández    schedule 04.01.2013
comment
Есть ли возможность удалить нулевой 10.00, хм. Было бы более чисто показывать только десятичные дроби, когда они есть, но если у нас есть десятичное число, то оно будет округлено до 435.89 ?? - person azerafati; 21.01.2015
comment
У меня такой же вопрос. См.: stackoverflow.com/questions/52066661/ - person vphilipnyc; 26.12.2018

Я рекомендую использовать значение DEFAULT (= в зависимости от локали), если ваше приложение должно работать с разными языками:

${#numbers.formatDecimal(abc.value, 1, 'DEFAULT', 2, 'DEFAULT')}

Из документа Thymeleaf (точнее NumberPointType):

/* 
 * Set minimum integer digits and thousands separator: 
 * 'POINT', 'COMMA', 'NONE' or 'DEFAULT' (by locale).
 * Also works with arrays, lists or sets
 */
${#numbers.formatInteger(num,3,'POINT')}
${#numbers.arrayFormatInteger(numArray,3,'POINT')}
${#numbers.listFormatInteger(numList,3,'POINT')}
${#numbers.setFormatInteger(numSet,3,'POINT')}

/*
 * Set minimum integer digits and (exact) decimal digits, and also decimal separator.
 * Also works with arrays, lists or sets
 */
${#numbers.formatDecimal(num,3,2,'COMMA')}
${#numbers.arrayFormatDecimal(numArray,3,2,'COMMA')}
${#numbers.listFormatDecimal(numList,3,2,'COMMA')}
${#numbers.setFormatDecimal(numSet,3,2,'COMMA')}
person user1075613    schedule 13.05.2015
comment
Если значение ниже 1, например. 0.55, то результатом этого выражения будет .55. Я рекомендую установить минимальные целые цифры на 1: ${#numbers.formatDecimal(abc.value, 1, 'DEFAULT', 2, 'DEFAULT')}. Тогда результат 0.55. - person naXa; 03.02.2019

Теперь вы можете более просто вызвать метод formatCurrency в утилите numbers:

#numbers.formatCurrency(abc.value)

Это также устранит необходимость в символе валюты.

Пример: <span th:remove="tag" th:text="${#numbers.formatCurrency(abc.value)}">$100</span>

person vphilipnyc    schedule 05.02.2018
comment
Этот метод отсутствует в API Thymeleaf. - person Martín Straus; 24.03.2018
comment
thymeleaf.org/apidocs/thymeleaf/3.0.9.RELEASE/org/thymeleaf/ И вы можете щелкнуть Upvote, чтобы отменить свой голос. - person vphilipnyc; 29.06.2018
comment
что, если мне нужно отформатировать другую валюту? Евро, фунт и т.д. - person naXa; 29.12.2018
comment
Конечно, это выходит за рамки этого вопроса, поскольку OP смотрит исключительно на отображение долларов (текущая локаль), и нет необходимости в нескольких валютах. Но именно для этого на GitHub есть открытый вопрос: github.com/thymeleaf/thymeleaf/issues/ 604. Для описания внешней ссылки будет использоваться более длинная форма с использованием formatDecimal, но может быть некоторый интерес к методу formatCurrency(number, locale). - person vphilipnyc; 29.12.2018

Вы бы встроили служебный объект номеров Thymeleaf следующим образом:

<span>[[${#numbers.formatCurrency(abc.value)}]]</span>

В представлении он даже добавит для вас знак доллара ($).

person Isaac Riley    schedule 12.12.2018
comment
Вы потеряете текст по умолчанию между тегами span при встраивании. Откройте страницу прямо в браузере (без контейнера/сервера), и вы увидите разницу. Это главная сила Thymeleaf, которую вы потеряете. - person vphilipnyc; 26.12.2018
comment
Согласовано. В исходном посте использовалось встраивание, и мое предложение было предвзятым. - person Isaac Riley; 26.12.2018