持有价格的Java最佳类型

2022-09-02 11:57:00

可能的重复:
在Java中表示货币值

哪种java类型适合处理价格价值?请告诉我为什么?

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

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

ps. 我需要最佳实践

以及它如何在数据库中呈现?


答案 1

在处理货币时,您应该使用BigDecimal。Java的本机浮点类型存在与其他语言相同的精度问题,因为某些小数不能准确地表示为浮点数。即使认为它不是特定于java的,这也是一篇优秀的文章,它描述了将十进制值表示为浮点数的复杂性。

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


答案 2

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

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

您只需要在UI中在美分和主要美元之间进行转换,而域则以美分计算所有内容