Hive浮點數的幾種不同取值

2021-08-19 15:52:23 字數 1459 閱讀 6373

1、round:四捨五入

round(double d) : 返回double型的d的bigint型別的近似值 

round(double d,int) : 返回double型的d的保留n位小數的double型別的近似值

2、ceil:向上取整

ceil(double d): d是double型別的,返回》=d的最小的bigint值 

3、floor:向下取整

floor(double d): d是double型別的,返回<=d的最大的bigint值 

4、取隨機數

rand() rand(int seed): 每行返回乙個double型的隨機數,整數seed是隨機因子 

需求:

每天直播時長超過半小時算半小時,不到半小時捨去算直播時長。

excel中有直接的公式可以取,但hive中好似不行。

=floor(a1,0.5)  excel中

select floor(3.4)

select substr(round(123.58,1),-1,1);

select round(123.58,1)

最終,hive可以這樣實現需求:

select floor(123.58)+(case when int(substr(round(123.58,1),-1,1))>=5 then 0.5 else 0 end);
實際的計算指令碼:

select room_id,count(case when live_hours>=1 then pt_day else null end) eff_live_days,sum(live_hours) live_hours,sum(floor(live_hours)+(case when int(substr(round(live_hours,1),-1,1))>=5 then 0.5 else 0 end)) live_hours_half

from (select room_id,pt_day,sum(unix_timestamp(updated_time)-unix_timestamp(switch_time))/60/60 live_hours

from honeycomb_all_live_history_status

where pt_month='2018-04' and category_id=111

group by room_id,pt_day) x

group by room_id;

hive浮點數轉化為整數

1 round 四捨五入 round double d 返回double型的d的bigint型別的近似值 round double d,int 返回double型的d的保留n位小數的double型別的近似值 如 select round cust rate from tmp.test select ...

浮點數的儲存以及 浮點數的比較

浮點數的儲存採用的是近似的原理 float儲存格式為 s e m 1位符號位 8位指數 23位尾數 轉成數值即為 v 1 s 1.m 2 e 127 對於16.5轉成二進位制為00010000.1 1.00001 2 4,那麼在記憶體的表示為 符號位 指數4 127 131 尾數 0 1000001...

單精度浮點數的取值,表示以及相關

可以表示的範圍為 3.40282 10 38 1.1111 1 2 127 即 0 11111110 11111111111111111111111 23個1 單精度浮點數可以表示1.175 10 38 1.00 0 2 126 的資料而不損失精度。0 00000001 00000000000000...