Как отформатировать номера в шаблонах скорости?
Я получаю объект java в своем шаблоне скорости. Объект имеет двойное значение, которое я хочу отформатировать до 2 десятичных знаков и отобразить его в моем шаблоне.
Класс, для которого im получает объект, похож на этот
Class Price
{
double value;
String currency;
}
В моем шаблоне скорости im получает значение, подобное этому
$price.value
но перед его отображением мне нужно отформатировать его до двух знаков после запятой.
Я хочу преобразовать
23.59004 до 23.59
35,7 до 35,70
От 3,0 до 3,00
от 9 до 9.00
Скажите, пожалуйста, как я могу это сделать в шаблоне скорости? Я много искал для этого и обнаружил, что могу использовать инструменты скорости, но нет примеров, связанных с этим? и могу ли я использовать инструменты скорости в шаблонах?
Ответы
Ответ 1
Ожидается, что инструменты Velocity будут использоваться в шаблонах Velocity; по сути, они являются объектами, добавленными к переменным, доступным в шаблоне, так что вы можете использовать $numberTool.format("#0.00", $val)
или аналогичные. Если ни один из доступных инструментов не соответствует вашим потребностям, просто создайте POJO и добавьте его в шаблон.
Чтобы сделать это, вы также должны добавить следующую зависимость от maven:
<dependency>
<groupId>org.apache.velocity</groupId>
<artifactId>velocity-tools</artifactId>
<version>2.0</version>
</dependency>
и напишите следующий код:
context.put("numberTool", new NumberTool());
Ответ 2
#set($String = "abc")
$String.format("%.2f", $val)
$val
должен быть Double или Float в этом случае...
Ответ 3
Используйте MathTool из проекта VelocityTools.
$math.roundTo(2, $val)
Ответ 4
FormatCurrency ($ значение). Это хороший код скорости java для форматирования номера в формате валюты.
Ответ 5
$numberTool.format( "# 0.00", $val)
Ответ 6
Лучший способ сделать что-то помимо использования $numberTool.format
- это использовать один из классов инструментария MessageFormat
, которые не просто цифры. Например, мы используем MessageTool
, который является специфичным для Struts, но вы можете использовать нечто подобное, например ResourceTool
:
resources.properties
some.key=The price is currently {0,number,$#.##}
template.vm
<p>
$msg.get('some.key', 'resources', [$price])
</p>
Таким образом, вы получаете число в контексте, а не только все отдельно. На неанглийском языке число может быть более подходящим для того, чтобы левее текста, или в середине, или что-то еще. Это дает вам гораздо большую гибкость, чем просто форматирование числа по отдельности.