impala 四舍五入后转换成string后又变成一个double的数值解决(除不尽的情况)

本文介绍如何在Impala中解决四舍五入后的数值转换为string时出现的精度问题,通过使用decimal类型确保数值精确表示,并提供具体SQL语句案例。

impala 四舍五入后转换成string后又变成一个double的数值解决(除不尽的情况)
例如
Query: select cast(round(2 / 3, 4)*100 as string)
+---------------------------------------+
| cast(round(2 / 3, 4) * 100 as string) |
+---------------------------------------+
| 66.670000000000002 |
+---------------------------------------+
改成
Query: select concat(cast(cast(round(2 / 3, 4) * 100 as decimal(9,2)) as string) ,'%')
+--------------------------------------------------------------------------+
| concat(cast(cast(round(2 / 3, 4) * 100 as decimal(9,2)) as string), '%') |
+--------------------------------------------------------------------------+
| 66.67% |
+--------------------------------------------------------------------------+

decimal(9,2) : 9表示位数,2表示小数精度。decimal最大精度是38
有效位:±1.0 × 10(-28次方) 到 ±7.9 × 10(28次方)
精度:28 到 29 位

2. decimal ,float,double 差别
mysql中存在float,double等非标准数据类型,也有decimal这种标准数据类型。
其区别在于,float,double等非标准类型,在DB中保存的是近似值,而Decimal则以字符串的形式保存数值。
数据定义

转载于:https://www.cnblogs.com/gavinYang/p/11196412.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值