impala 四舍五入后轉換成string后又變成一個double的數值解決(除不盡的情況)


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則以字符串的形式保存數值。
數據定義


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM