Как работать с цифровыми значениями, которые сохраняются как строки utf-8 в полях данных для сортировки BigDecimals - PullRequest
0 голосов
/ 06 апреля 2019

Я знаю, как сортировать строки utf-8.Но я не знаю, как эффективно преобразовать цифры в кодировке utf-8 для сортировки.Когда я печатаю поля данных в кодировке utf-8 моей таблицы в теге gridview jsp , он отображается в формате ISO_8859_1 как js .но когда я пытаюсь динамически обрабатывать мои поля данных на стороне сервера, я получаю исключение неправильного формата как BigDecimal .Чтобы решить проблему, я попытался прочитать мои данные в виде массива байтов.Я ожидал, что при использовании функции MathContext результат будет истинным, но это не так.Это мой код:

<%
            cmdcnf.sqlText = "select * from  `mytable`";
            rs = cmdcnf.execute();
            TreeMap<BigDecimal, Integer> p = new TreeMap();
            while (rs.next()) {
                String normalizedRate = "";
                String strRate = rs.getString("rate");
                if (strRate == null || strRate.trim().length() == 0) {
                    normalizedRate = "0";
                } else {
                    normalizedRate = strRate.replaceAll("\\s", "").replace(',', '.');
                }
                byte[] bytesRate = normalizedRate.getBytes();
                bytesRate = normalizedRate.getBytes(StandardCharsets.UTF_8);
                //bytesRate = normalizedRate.getBytes(StandardCharsets.ISO_8859_1);
//BigDecimal bRate = new BigDecimal(Arrays.toString(bytesRate));
                BigDecimalOperations bOper = new BigDecimalOperations(new MathContext(2, RoundingMode.HALF_UP));
                BigDecimal bRate = new BigDecimal("0.0");
                if (bytesRate.length>1) {
                    bRate = bOper.fromByteArray(bytesRate);
                }
                out.println("</br>" );
for(byte b:bytesRate){out.print( b );}
//BigDecimal bRate = new BigDecimal(Arrays.toString(bytesRate));
                //normalizedRate = String.valueOf(bytesRate);
                out.print("<h1>" + bRate + "</h1> ");
            }
            rs.close();
        %>

Например, вывод: 9.59459376E-959459368 Я ожидаю, что вывод будет: 9000

Для отладки я напечатал содержимое массива bytesRate, чтоЯ ожидал, что будет 9000, но это: 57484848. На самом деле, это Ascii коды 9000. Но, пытаясь преобразовать их в BigDecimal формат, я не знаю, что этоэффективный способ;Попытка преобразовать каждую ячейку массива как символ в цифру неэффективна для большого количества цифр в таблице.

Наконец, моя цель разобраться с закодированными текстами utf-8 в моей таблице состояла в том, чтобы отсортировать их.Мне не нужно использовать TreeMap () для сортировки.Но мне нужна функция сортировки, которая работает с двумя связанными столбцами, которые имеют числовые значения.Как я могу эффективно сортировать на основе ASCII кодов в байтовом массиве, преобразованном в BigDecimal цифры?Я пытался использовать BigDecimalOperations.fromByteArray (bytesRate) в ch.javasoft.math.BigDecimalOperations, но я не уверен, что это был правильный путь.

Заранее спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...