获取表格 DB XXX.0E0(XX 代表数字)

Getting form DB XXX.0E0 ( XX stand for a number)

我正在尝试使用 JDBCTamplate 查询 select 语句。 select 声明:

SELECT currency, SUM(amount) AS total
  FROM table_name
 WHERE user_id IN (:userIdList)
 GROUP BY currency

DB Table 有三列:

table 例如

user_id    currency   amount   
1           EUR        9000  
2           EUR        1000  
3           USD        124  

当我尝试运行此代码时

namedParamJDBCTemplate.query(query,
                             new MapSqlParameterSource('user_id', userIdList),
                             new ResultSetExtractor<Map>() {
                                 @Override
                                 public Map extractData(ResultSet resultSet) throws SQLException, DataAccessException {
                                     HashMap<String,Object> mapRet = new HashMap<String,Object>();
                                     while(resultSet.next()){
                                         mapRet.put(resultSet.getString("currency"), resultSet.getString("total"));
                                     }
                                     return mapRet;
                                 }
                             });

我将结果集作为地图获取,但金额的结果如下所示:

EUR -> 10000.0E0  
USD -> 124.0E0  

当我 运行 在数据库中进行相同的查询(不是通过代码)时,结果集很好并且没有“0E0”。

如何在没有“0E0”的情况下只获得 EUR -> 10000 和 USD-> 124?

.0E0 是我认为的数字的指数。所以 124.0E0 代表 124.0 乘以十的 0 次方(写作 124 x 10^0)。任何事物的 0 次方都是 1,所以你得到 124 x 1,这当然是正确的值。

(如果是,例如,124.5E3,则表示 124500。)

这种表示法更常用于处理大数,因为 5436.7E20 比 543670000000000000000000 更具可读性。

在不知道你的数据库背景的情况下,我只能假设这种表示法是从数字字段到字符串的转换(在result.getString("total")中)产生的。因此,你应该问问自己,你是否真的需要结果作为字符串(或者只使用 .getFloat 左右,同时改变你的 HashMap 类型)。如果是这样,你还有一些可能性:

  • 稍后将值转换为字符串 → e. G。 String.valueOf(resultSet.getFloat("total"))

  • 截断 .0E0 → e。 G。 resultSet.getString("total").replace(".0E0", "")(注意,当然,如果出于某种原因,你得到另一个后缀,如 .5E3,这将不起作用;它也会切断小数点后的任何位置)

  • 也许找到一个数据库,JDBC 或抑制 E-Notation 的驱动程序设置。