首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >股票价格的BigDecimal?

股票价格的BigDecimal?
EN

Stack Overflow用户
提问于 2011-03-13 05:08:44
回答 5查看 2.1K关注 0票数 5

我意识到我们应该使用BigDecimal来表示所有的货币值,但是以美元表示的股票价格呢?

我注意到主要供应商的数据馈送应用程序接口使用double类型来表示股票报价。有人知道为什么吗?

这是否意味着我的应用程序可以使用double类型来存储来自这些供应商的股票报价?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-03-13 05:24:44

我在野外工作。从精度的角度来看,BigDecimal显然是理想的,但从性能的角度来看,它很糟糕。在某些情况下,加倍是一种选择(特别是在处理正常股票价格时,加倍很容易-如果采取适当的预防措施-能够代表我经常处理的所有证券交易所的整个价格区间)。

另一种选择是,如果您知道所讨论的交易所使用的DP的范围,则使用固定点和正常的int或long。举一个我很熟悉的例子,Xetra (德国电子交易所)目前最多有3位小数。使用3dp,您可以使用正常的int表示最高2,147,483.647的价格。对于单个价格来说很好,但不适合代表一天的总交易量。

这一切都是关于你正在接收什么数据,这些数据的精度是多少,以及你是如何处理它的。

票数 7
EN

Stack Overflow用户

发布于 2011-03-13 05:44:23

货币不使用二进制浮点的原因是货币使用小数,人们(和会计法规)期望在货币上执行的算术操作中有特定的小数行为-这是二进制浮点所不提供的。

但是,股票报价提要通常不用于记账。它们被显示、比较、用作各种图表分析指标或交易算法的输入-所有这些都比会计更接近科学应用,并且不需要小数行为或精度。相反,由于数据量大,存储效率和性能是相关的,而BigDecimal在这方面真的很糟糕。

票数 11
EN

Stack Overflow用户

发布于 2011-03-13 05:23:53

我反对使用BigDecimal来表示货币价值(通常*)。使用专为与货币一起使用而设计的数据类型(具有最低精度,例如mils表示USD),并且知道如何处理其他规则。这也可以用来防止美元到日元的“意外”转换,等等。Joda Moneytimeandmoney就是两个这样的例子。

虽然BigDecimal在解决固定精度问题上比double好得多,但它仍然不是正确的货币表示。(BigDecimal可以是后端,也可以完全替换为另一个impl,作为前端,它不足以表示域。)

祝你编码愉快。

*正如其他人所说,这取决于使用情况。

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5285505

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档