如何处理保存为数据字段中utf-8字符串的数字值以对BigDecimals进行排序

时间:2019-04-06 06:06:42

标签: java arrays jsp utf-8

我知道如何对utf-8字符串进行排序。但是我不知道如何以有效的方式转换utf-8编码的数字进行排序。当我在 gridview jsp 标签中打印表格的utf-8编码数据字段时, ISO_8859_1 格式显示> js 。但是,当我尝试在服务器端动态处理我的数据字段时,出现了 BigDecimal 格式错误的异常。为了解决该问题,我尝试将我的数据读取为字节数组。我期望通过使用 MathContext 函数输出为true,但事实并非如此。 这是我的代码:

<%
            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

为了进行调试,我打印了我希望是9000的bytesRate数组的内容,但它是:57484848。实际上,这些是9000的 Ascii 代码。但是,在尝试转换它们时我不知道 BigDecimal 格式是什么有效的方法;尝试将表中的每个单元格都转换为char转换为digit,对于表中的大量数字来说效率不高。

最后,我要处理表格中已编码的utf-8文本的目标是对它们进行排序。我不必使用TreeMap()进行排序。但是我需要一个排序函数,该函数可与两个具有数值的相关列一起使用。如何在转换为BigDecimal数字的字节数组中基于ASCII码进行有效排序?我尝试在ch.javasoft.math.BigDecimalOperations中使用BigDecimalOperations.fromByteArray(bytesRate),但是我不确定这是正确的方法。

谢谢。

0 个答案:

没有答案