| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > XML, XSL > Приведение числа к нужному формату |
| Автор: evilice 27.11.2008, 14:49 |
| Проблема заключается в следующем: В xml лежит число вида х.хххххE8 (пример: 1.33946E8) на выходе я должен получить нормальное число вида ххх... (т.е., если исходить из выше упомянутого примера, я должен получить число: 133946000) как средствами xsl это можно сделать? |
| Автор: sir_nuf_nuf 27.11.2008, 17:57 |
| evilice, http://www.w3schools.com/XSL/func_formatnumber.asp читайте! =) |
| Автор: evilice 28.11.2008, 10:03 | ||||
| в том-то и дело, что format-number(number, string, string?) а число 1.234678E7 представляется, как string! и попытка его привести к number, оканчивается еррором! т.е. format-number(1.23442E6, '#.0') на выходе имеет NaN...
или
что однофигственно! ну раз силами стандартных методов это сделать нельзя... придётся извращаться и парсить... |
| Автор: sir_nuf_nuf 28.11.2008, 10:40 | ||||||
| да ладно. все работает нормально. проверьте сами на http://xslt.sitesfree.com/.
как число оно представляется. проблема в следующем xpath:
Добейтесь что бы: <xsl:value-of select="number($yzel/*[local-name()='CostContract'])" /> выводило нормальное число. |
| Автор: evilice 28.11.2008, 12:47 | ||||
именно этого мне и нужно добиться... вот часть кода xml файла:
т.е. xsl, в любом случае получает на входе "1.20146E8"... и вот как раз xsl мне и должен помочь с выводом числа в нормальном виде... а из-за того что в числе присутствует "Е", xsl воспринимает его как string -> format-number не отрабатывает должным образом... в общем пока я тщетно искал стандартное решение, мне пришло в голову сделать все через, всем извесное, место... главное чтобы работало, пока не будет найдено, в полне адекватное и быстрое решение... принцип решения проблемы заключается в следующим: т.к. "1.20146E8" воспринимается как string, значит будем парсить! 1) бьём строку на две части "до Е" и "после Е", назовём их "а" и "b" 2) приводим обе части к number 3) с помощью рекурсии умножаем "а" на 10 "b" раз 4) округляем полученное число до целого, но это конкретно для моей задачи(у меня не может быть дробных). можно и под себя настроить округление(по желанию) |
| Автор: sir_nuf_nuf 28.11.2008, 14:52 | ||||
| evilice, да не воспринимается он как string! точно! вы просто xpath не правильно написали. сделайте простой пример и посмотрите: <xsl:value-of select="format-number('1.20146E8', '#')"/> все работает. ваша проблема в том, что <xsl:value-of select="number($yzel/*[local-name()='CostContract'])" /> у вас ваще ничего не выводит, никаких данных! либо не те. format-number не при чем. Вот пример где все работает.
Учите XPath! |