在做mysql统计时,我们一定会遇到获取百分比数据的需求。可以使用mysql函数,在查询时对数据进行4舍5入。
需求:查询正确率,并保留2位小数:
1. 使用format()函数。
因为正确率是百分比,故要保存4位小数:
五入:
mysql> select format(0.10298,4);
+-------------------+
| format(0.10298,4) |
+-------------------+
| 0.1030 |
+-------------------+
1 row in set (0.01 sec)
四舍:
mysql> select format(0.10294,4);
+-------------------+
| format(0.10294,4) |
+-------------------+
| 0.1029 |
+-------------------+
1 row in set (0.01 sec)
四舍五入来取整:
mysql> select format(1.10294,0);
+-------------------+
| format(1.10294,0) |
+-------------------+
| 1 |
+-------------------+
1 row in set (0.01 sec)
2. 使用convert函数
最终的结果集有4位,其中小数点(4舍5入)保留3位。
mysql> select convert(0.14275,decimal(4,3));
+-------------------------------+
| convert(0.14275,decimal(4,3)) |
+-------------------------------+
| 0.143 |
+-------------------------------+
1 row in set (0.01 sec)
注意:若是字段值过大,DECIMAL的规定是4位数字:小数点保留3位,整数就保留1位。那么最终输出的是9.999。
mysql> select convert(10.14275,decimal(4,3));
+--------------------------------+
| convert(10.14275,decimal(4,3)) |
+--------------------------------+
| 9.999 |
+--------------------------------+
1 row in set (0.01 sec)
3. JAVA代码的实现
得到未4舍5入的数据,依靠JAVA代码来完成转换。newScale(保留几位小数)
public static double round(double source, int newScale) {
BigDecimal bg = new BigDecimal(source);
return bg.setScale(newScale, BigDecimal.ROUND_HALF_UP).doubleValue();
}
推荐阅读