Java最好的类型来保持价格

时间:2012-09-19 14:10:45

标签: java types

  

可能重复:
  Representing Monetary Values in Java

哪种java类型能很好地处理价格?请告诉我为什么?

我不知道这只是一个问题:)

我只知道这种类型必须“安全”。因为如果我们创建商店应用或者那样的想法。

PS。我需要最佳实践

以及它在数据库中的表现方式?

6 个答案:

答案 0 :(得分:22)

在处理货币时应使用BigDecimal。 Java的本机浮点类型与其他语言存在相同的精度问题,因为某些小数不能准确地表示为浮点数。甚至认为它不是特定于java的,this is an excellent article描述了将十进制值表示为浮点数的复杂性。

通常,应用程序中的瞬态值应始终使用BigDecimal,只在必要时转换为float(用于持久性,或向用户显示数据等)。

答案 1 :(得分:4)

您所关注的最小分母的整数(或长)(美元和欧元的分数)

这是因为计算机上的浮点数对于十进制值本身就不准确(0.1 + 0.2!= 0.3)

你只需要在UI中转换分数和主要美元,而域名计算所有内容

答案 2 :(得分:3)

就个人而言,我会使用BigDecimal(我的公司也是如此!)。我认为floatdouble错误的建议是因为floating-point values are stored in the system的方式,并且存在精度损失的可能性(处理资金时您肯定不想要这样做)。

答案 3 :(得分:2)

如果您正在构建财务系统,我建议您创建或使用自己的Java类来表示货币金额。

至于用于持有货币金额的数据类型,long或BigDecimal。

以下是一个示例Money class,其中显示了处理货币金额时所需的方法类型。

答案 4 :(得分:1)

如果你使用合理的舍入结果double是完美的,不仅是最快但最简单的写。这可以代表高达70万亿美元的资金而不会出错。不要使用float,因为这样只能代表大约10,000美元而不会出错。

如果您不知道使用什么明智的舍入,BigDecimallong美分可能是更好的选择。

答案 5 :(得分:0)

您需要使用BigDecimal类。