Мне нужно отформатировать денежную сумму до 2 знаков после запятой, хотя на самом деле в сумме 4 знака после запятой. Последние 2 десятичных знака всегда должны быть 0.
Например:
2480130 следует отформатировать в 2480100.
Длина значения должна оставаться неизменной, но последние 2 цифры всегда должны быть равны нулю, чтобы округлить денежное значение в меньшую сторону.
В настоящее время я использую следующий XSLT:
<xsl:value-of select = "format-number((Amounts/NetUnitPrice * 10000),'############00')"/>
Но это не преобразует последние 2 цифры в 0.
Некоторую документацию по функции format-number можно найти здесь https://www.w3schools.com/xml/func_formatnumber.asp
Какой шаблон я могу использовать для этого с помощью функции format-number? Очень важно, чтобы денежная стоимость не изменялась никаким образом, кроме округления до 2 знаков после запятой. Есть ли другая функция, которую я должен использовать для этого?





Использовать этот. Он заменит последние 2 цифры на 00.
<xsl:value-of select = "replace(format-number((Amounts/NetUnitPrice* 10000),'############00'), '..$', '00')"/>
Спасибо. Я забыл упомянуть, что я могу использовать только XSLT 1.0, поэтому функция замены мне недоступна. Есть ли аналогичная функция для XSL 1.0, которую я могу использовать вместо нее?
Мне удалось найти решение, сократив количество на 2 десятичных знака и соединив «00» в конце значения. Это также правильно округляет значение вверх/вниз. См. код ниже:
<xsl:value-of select = "concat(format-number((Amounts/NetUnitPrice * 100),'#############0'), '00')"/>
Обратите внимание, что format-number() в XSLT 1.0 не указывает четко, какой алгоритм округления используется. Он как бы определяется ссылкой на спецификацию JDK 1.1 (которую в настоящее время довольно сложно достать), но Java предлагает выбор алгоритмов округления, а XSLT 1.0 не говорит, какой из них используется. Так что лучше не полагаться на format-number() для округления до нуля, даже если это то, что делает ваша текущая реализация.
Спасибо за объяснение. Да, я знаю, что формат-число использует какой-то неясно определенный алгоритм округления. В этом случае, хотя он работает достаточно хорошо для требования.
Каков фактический ввод здесь? Округление 2480130 до 2480100 тривиально:
round($number div 100) * 100.