哪种java类型能很好地处理价格?请告诉我为什么?
我不知道这只是一个问题:)
我只知道这种类型必须“安全”。因为如果我们创建商店应用或者那样的想法。
PS。我需要最佳实践
以及它在数据库中的表现方式?
答案 0 :(得分:22)
在处理货币时应使用BigDecimal。 Java的本机浮点类型与其他语言存在相同的精度问题,因为某些小数不能准确地表示为浮点数。甚至认为它不是特定于java的,this is an excellent article描述了将十进制值表示为浮点数的复杂性。
通常,应用程序中的瞬态值应始终使用BigDecimal,只在必要时转换为float(用于持久性,或向用户显示数据等)。
答案 1 :(得分:4)
您所关注的最小分母的整数(或长)(美元和欧元的分数)
这是因为计算机上的浮点数对于十进制值本身就不准确(0.1 + 0.2!= 0.3)
你只需要在UI中转换分数和主要美元,而域名计算所有内容
答案 2 :(得分:3)
就个人而言,我会使用BigDecimal
(我的公司也是如此!)。我认为float
或double
错误的建议是因为floating-point values are stored in the system的方式,并且存在精度损失的可能性(处理资金时您肯定不想要这样做)。
答案 3 :(得分:2)
如果您正在构建财务系统,我建议您创建或使用自己的Java类来表示货币金额。
至于用于持有货币金额的数据类型,long或BigDecimal。
以下是一个示例Money class,其中显示了处理货币金额时所需的方法类型。
答案 4 :(得分:1)
如果你使用合理的舍入结果double
是完美的,不仅是最快但最简单的写。这可以代表高达70万亿美元的资金而不会出错。不要使用float
,因为这样只能代表大约10,000美元而不会出错。
如果您不知道使用什么明智的舍入,BigDecimal
或long
美分可能是更好的选择。
答案 5 :(得分:0)
您需要使用BigDecimal类。