将小数转换为整数并找出两列之间的差异

6tr1vspr  于 2021-06-24  发布在  Hive
关注(0)|答案(1)|浏览(311)

我有两个专栏,如下所示:

A      |  B
0.33   |  0.55
0.44   |  0.65
10     |  20
10.1   |  10.234
11.236 |  12.8963
12     |  30
30.5698|  35.6893

在上述列中,带小数的值应乘以100,以将其转换为整数,并且整数的格式正确,因此不应受到干扰。
使用转换后的整数,计算列之间的差值。
所以我在Hive里尝试了数学函数,比如mod函数。
但是使用这个函数,整数的差是正确的。但是小数的差别是错误的。
我不知道我哪里出错了。
我尝试了以下代码:
从样本中选择mod(b,100)-mod(a,100)
实际结果是:

A      |  B      |  C
0.33   |  0.55   |  22
0.44   |  0.65   |  21
10     |  20     |  10
10.1   |  10.234 |  13
11.236 |  12.8963|  166
12     |  30     |  18
30.5698|  35.6893|  512
im9ewurl

im9ewurl1#

a和b是什么数据类型?如果将它们定义为小数,则所有值都将具有相同的精度:

create  table temp.table_name           (                                                                                                                                                                                     
A                  decimal(10,5)  
,B                  decimal(10,5)  
)
stored as parquet location '../temp.db/table_name'
;

INSERT INTO TABLE temp.table_name 
  VALUES (0.33   ,0.55)
,(0.44   ,0.65)
,(10     ,20)
,(10.1   ,10.234)
,(11.236 ,12.8963)
,(12     ,30)
,(30.5698,35.6893);

选择的结果(具有相同精度的所有数据):

+---------------+---------------+--+
| table_name.a  | table_name.b  |
+---------------+---------------+--+
| 0.33000       | 0.55000       |
| 0.44000       | 0.65000       |
| 10.00000      | 20.00000      |
| 10.10000      | 10.23400      |
| 11.23600      | 12.89630      |
| 12.00000      | 30.00000      |
| 30.56980      | 35.68930      |
+---------------+---------------+--+

选择以获取小数点的差值:

select a ,b ,( cast(round((b*100),0) as int) - 
 cast(round((a*100),0) as int)) as res
from temp.table_name;

结果-小数之差:

+-----------+-----------+-------+--+
|     a     |     b     |  res  |
+-----------+-----------+-------+--+
| 0.33000   | 0.55000   | 22    |
| 0.44000   | 0.65000   | 21    |
| 10.00000  | 20.00000  | 1000  |
| 10.10000  | 10.23400  | 13    |
| 11.23600  | 12.89630  | 166   |
| 12.00000  | 30.00000  | 1800  |
| 30.56980  | 35.68930  | 512   |
+-----------+-----------+-------+--+

希望能对你有所帮助。

相关问题