Java double数据类型永远不应该用于精确值,例如货币?

时间:2016-05-28 14:56:03

标签: java oracle double abstract-data-type

当我查看关于java的官方oracle variables datatypes教程时 {{3}}

当我读到这个时,我感到很惊讶 Java double 数据类型永远不应用于精确值,例如货币!

任何人都可以帮助我们吗? 什么是用于精确值的最佳实践,例如货币?

3 个答案:

答案 0 :(得分:2)

金额字段的最佳数据类型是BigDecimal。甚至Joshua Bloch在他的有效Java文章中解释了为什么它应该被用于准确的精度。

答案 1 :(得分:1)

这取决于您的申请。对于金融应用程序,通常最好使用十进制(虽然我真的没有看到好处,例如,在涉及货币汇率的应用程序中 - 一种货币中非常精确的十进制数字在另一种货币中不是这样)。

对于科学和工程应用,如果java有这样的东西,总是使用double(或long double)。两者之间的区别更多的是一个人使用基数10而另一个人使用基数2,而不是精确度。科学家和工程师从来不关心或关心“十进制” - 只来自银行家等。

答案 2 :(得分:0)

Double和float类型本质上是不精确的,这被称为“浮点不精确”。这是大多数编程语言所遇到的,有些提供特定的货币类型以努力克服这种可能性。有关一些好消息,请参阅http://floating-point-gui.de/

常见的策略是使用int类型并根据需要乘以/除以100。