markdown Java BigDecimal为什么以及何时

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown Java BigDecimal为什么以及何时相关的知识,希望对你有一定的参考价值。

## 参考链接

- [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进行计算.

以上是关于markdown Java BigDecimal为什么以及何时的主要内容,如果未能解决你的问题,请参考以下文章

markdown 金额数据的BigDecimal

java - 如何将浮点数转换为 BigDecimal? [复制]

java.math.BigInteger 不能转换为 java.math.BigDecimal

java.math.BigDecimal 不能转换为 java.lang.String?

java中BigDecimal和bigInteger如何转换

java怎么把BigInteger类型转换为BigDecimal类型