Существует очень странная проблема, с которой мы сталкиваемся с округлением XSLT и функциями Format-number. Допустим, у меня есть номер 131.855, и я хочу округлить его до двух знаков после запятой. Я ожидаю, что ответ будет 131,86, но функция XSLT round() округляет его до 131,85. Я попытался использовать «round (131.855 * 100) div 100», но он не работает. Если мне нужно округлить число, например 127.855, оно округляется правильно до 127.86, используя тот же код, т. Е. «Round (127.855 * 100) div 100». Кроме того, странно, если я попытаюсь округлить 131.755, он округляется до 131.76! Очень странно. Мы также пробовали использовать функцию format-number(), но это также дает странные результаты. Например, если я беру номер 349615.225, и я использую номер формата на этом i.e-формате (349615.225, '#. ##'), он дает 349615.22, тогда как я ожидаю, что десятичные числа будут .23. Но если я использую формат-номер на 131.855 он автоматически преобразуется в 131.86 ...Вопросы округления XSLT
Я также попытался с помощью круглой функции() внутри-формата числа(), но это также дало аналогичные результаты ..
Мы используем XSLT 1.0. Переход на XSLT 2.0 кажется сложной задачей. Только обходной путь, который я вижу, - использовать некоторую функцию java и вызывать ее из XSL для округления.
Любые идеи будут высоко оценены.
Edit:
Как ни странно точно такое же проблема возникает с функцией Math.Round Java.
Какой процессор XSLT вы используете? –
Это, по-видимому, ошибка, вызванная арифметикой с плавающей запятой. Мне удалось воспроизвести проблему как в Xalan http://xsltransform.net/bFN1y8S, так и в Saxon http://xsltransform.net/bFN1y8S/1, но с любопытством не в libxslt, так что это может быть проблема с движком Java. –
"* То же самое происходит с функцией Java Math.round. *« Ну, вот и все. –