Tom*_*ker 5 java stocks decimal
我意识到我们应该BigDecimal用于所有货币价值,但是美元的股票价格呢?
我注意到主要供应商的数据Feed API使用double股票报价类型.有谁知道为什么?
这是否意味着我的应用程序可以使用该类型double来存储来自这些供应商的股票报价?
Mic*_*rdt 10
不使用二进制浮点数的原因是货币使用小数分数,人们(和会计规则)期望对其执行的算术运算具有特定的十进制行为 - 二进制浮点不提供.
但是,股票报价馈送通常不用于会计.它们被显示,比较,用作各种图表分析指标或交易算法的输入 - 所有这些都比科学应用更接近于会计,并且不需要小数行为或精度.相反,由于大量数据,存储效率和性能是相关的,并且BigDecimal真的很糟糕.
我在外地工作.从精确的角度来看,BigDecimal显然是理想的,但从性能的角度来看却很糟糕.在某些情况下,双打是一种选择(特别是在处理正常的股票价格时,双打很容易 - 采取适当的预防措施 - 能够代表我经常处理的所有股权交易的价格范围的全部).
另一种选择是,如果您知道有问题的交易所使用的DP范围,则使用定点和普通的int或long.举一个我熟悉的例子,Xetra(德国电子交易所)目前最多有3个小数位.使用3dp,您可以使用正常的int表示高达2,147,483.647的价格.对于单个价格来说很好,对于代表一天的交易总数没有好处.
这是一个问题,即您接收的数据,数据的精确度以及处理方式.
小智 5
我拒绝使用BigDecimal作为货币价值(通常为*).使用设计用于货币的数据类型(具有最小精度,例如美元的mils),并知道如何处理其他规则.这也可以用来防止美元到日元等"意外"转换 .Joda Money或timeandmoney就是两个这样的例子.
虽然BigDecimal远远优于用于解决固定精度的双倍,但它仍然不是IMOHO的正确货币表示形式.(BigDecimal可能是后端[或者它可能完全被另一个impl替换],因为前端它不能充分代表域.)
快乐的编码.
*正如其他人所说,这取决于使用情况.
| 归档时间: |
|
| 查看次数: |
1631 次 |
| 最近记录: |