【发布时间】:2013-01-15 19:14:19
【问题描述】:
我正在使用 Tomcat/JSTL/MySQL/等构建一个新的电子商务平台。
我知道与使用浮点计算相关的各种问题 - 例如12.3456000000000789...我知道舍入与截断也可能是一个问题。
如果不将所有业务逻辑都转移到 Java 类中,那么在保持架构简单的同时对货币进行可靠计算的最佳方法是什么?
我对可能性的看法包括:
- 隔离问题计算并单独处理
- 将数字表示为多头并使用美分进行计算
- 使用 BigDecimal 并在 Java 中进行所有计算
- 尽可能将数字存储在字符串中
- 使用
我可能不是第一个这样做的人。
最直接的方法是什么?
【问题讨论】:
-
我听说 BigDecimal 是专门为此类事情设计的。不过我不是专家。
-
通过互联网搜索。这个问题已经回答了:What Every Computer Scientist Should Know About Floating-Point Arithmetic。简短回答:使用
BigDecimal。 -
<fmt:formatNumber ..>对视图很有帮助,因为大多数客户不会对看到超过 2 位小数感兴趣 ;) 此外,您可以在其中添加货币符号,这非常好。 -
谢谢。我知道浮点数和 BigDecimal 的问题。我希望在留在 JSTL EL 中时有一种简单的方法来使用它。例如c:set var=... value=... type="java.math.BigDecimal" 然后有很好的对象可以使用。我知道这要求很多。鉴于 Web 应用程序的性质,JSTL 设计人员最好在...中构建一些东西。
-
如果您的环境支持 EL 2.2,您可以在 EL 中调用 BigDecimal 特定的方法。对于其余部分,这个问题是题外话/非建设性的。尝试更强大的程序员.se,而不是基本上问“我知道除了 BigDecimal 没有其他方法,但还有其他方法吗?”。