## 参考链接
- [Java:Why should we use BigDecimal instead of Double in the real world?](https://stackoverflow.com/questions/6320209/javawhy-should-we-use-bigdecimal-instead-of-double-in-the-real-world)
一句话总结:
用在需要准确控制精度的场合: 例如钱相关的计算.
使用double具有16位的精度, float具有7位的精度, 所以称double为双精度浮点数.
对于hive和spark默认对于浮点运算用的都转换为double类型. 相似的, `over partition by`也是转成了double.
但是, 不同平台间\(例如hive和spark之间\)为了防止编译器的聚合操作\(sum等\)自动类型转换, 最好将小数统一转成一个格式, 例如double.
例如实验验证spark端`spark.sql("select 0.2+0.02")`会根据最高精度转换成decimal进行计算. 但是在hive端默认是转换成了double进行计算.