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

Posted

技术标签:

【中文标题】将小数转换为整数并找出两列之间的差异【英文标题】:Convert decimals into whole numbers and finding the difference between two columns 【发布时间】:2019-06-17 11:54:33 【问题描述】:

我有如下两列:

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

【问题讨论】:

请同时添加想要的结果 我已经提到它说实际结果是: 【参考方案1】:

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   |
+-----------+-----------+-------+--+

希望对您有所帮助。

【讨论】:

以上是关于将小数转换为整数并找出两列之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

使用python返回excel中两个不同文件中两列之间的差异

找出具有相同形状的两个DataFrame之间的差异

MySQL SUM 两列之间差异的值

如何自动比对excel两个表格中的资料并找出差异

如何从两列之间的差异创建新列?

计算Postgresql中两列之间的运行差异