#java #freemarker
#java #freemarker
Вопрос:
Я хотел бы скопировать BigDecimal
значение с произвольным количеством тралирующих нулей в шаблон Freemarker как есть (например, если вызов value.toString()
в Java приводит к 123.0000
, я хочу видеть точно 123.0000
вставленное в шаблон).
Однако использование встроенных модулей (например, ?string
) или просто ${valueWithZeroes}
всегда приводит к удалению конечных нулей. Об использовании ?string[...]
не может быть и речи, поскольку точное количество конечных нулей неизвестно. AFAIK, есть способ вызвать BigDecimal
собственный toString
метод из шаблона Freemarker с использованием ?api
— однако документы, похоже, не поощряют это делать. Итак, мне интересно, есть ли какой-либо другой способ добиться этого, используя сам Freemarker, не возвращаясь к методам Java.
Ответ №1:
Я считаю, java.text.DecimalFormat
что не могу этого сделать, и, следовательно, FreeMarker не может сделать это из коробки. Но вы можете определить свои собственные CustomNumberFormatFactory
и делать все, что возможно в Java. Смотрите пример для этого здесь: https://freemarker.apache.org/docs/pgui_config_custom_formats.html. Итак, вы делаете что-то вроде HexTemplateNumberFormatFactory
этого, и вы также можете установить свой пользовательский числовой формат в качестве числового формата по умолчанию (установив number_format
значение "@hex"
в примере).
Обратите внимание, что если вы просто используете BigDecimal.toString
как есть, форматирование не будет учитывать Locale
. Таким образом, ваш десятичный разделитель будет неправильным в некоторых языках.