获取表格 DB XXX.0E0XX 代表数字

问题描述

我正在尝试使用 JDBCTamplate 查询选择语句。 选择语句:

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

数据库表有三列:

  • user_id
  • 货币
  • 金额

以表格为例

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 乘以 10 的 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,这当然不起作用;它还会截断小数点后的任何位置)

  • 也许可以找到抑制 E-Notation 的数据库、JDBC 或驱动程序设置。