当前位置:  开发笔记 > 编程语言 > 正文

轻量级Java十进制类

如何解决《轻量级Java十进制类》经验,为你挑选了1个好方法。

我正在考虑为BigDecimal写两个有限精度的替代品,即DecimalInt和DecimalLong.这些将能够处理int和long的实际边界内的数字以及任意数量的小数位,可以以可变形式和不可变形式创建.我的计划是使DecimalInt支持+/- 999,999,999到+/- 0.999999999和DecimalLong相同,但最多18位数.

这可以通过将DecimalInt的十进制数字计数值保持为0-9,将DecimalLong的十进制数字计数值保持为0-18以及存储为缩放的int或long的实际值来完成.正常使用的是小数字小数,例如金钱和股票价格,通常为2-4位小数.

基本要求是(a)精益足迹(2个类,加上OverflowException),以及(b)完全支持所有基本操作以及所有有意义的数学.

谷歌搜索结果没有返回任何明显的命中 - 它们似乎都属于任意小数.

我的问题是:这已经完成了吗?这有隐藏的微妙之处,这就是为什么它还没有完成?有没有人听说过Java支持像DotNet这样的十进制类型的传言.

编辑:这与BigDecimal不同,因为它应该是(a)不处理一组int的更高效的地狱,并且(b)它不会包装BigInteger所以它也会在内存上更精简,并且(c)它有一个可变选项,所以它也会更快.总而言之 - 对于简单的用例,例如"我想存储银行余额而没有BigDecimal的开销和双精度的不准确性",开销更少.

编辑:我打算用int或long做所有的数学运算来避免经典问题:1586.60-708.75 = 877.8499999999999而不是877.85



1> Michael Borg..:

我强烈怀疑为什么没有这样做的原因是BigDecimal和BigInteger的开销并不像你想象的那么重要,并且避免它不值得努力以及以某种微妙的方式弄错它的风险.

使用你的例子:对于任何金融应用程序,节省几十个字节是一个非问题和有限的精度是一个交易破坏者(股票价格我通常在美国2-4位数,但如果你想与新兴市场打交道,你会遇到通货膨胀失控的货币,15位数的货币会给你买半条面包.

基本上,这听起来只是另一种过早优化的情况.


您是否见过以恶性通货膨胀货币交易产品的系统?我建议你远离那些.
推荐阅读
虎仔球妈_459
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有