Colt Java 矩阵库中的浮点错误
如何避免使用 Colt 矩阵库执行的财务计算中的浮点错误?
How do I avoid floating point errors in financial calculations performed with Colt matrix libraries?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
关于浮点类型的肮脏之处的一些重要阅读:每台计算机都有什么科学家应该了解浮点算术
以及更多 Java 风格的内容:Java 的原理浮点在任何地方都会伤害每个人
Some essential reading about the nastiness of floating point types: What Every Computer Scientist Should Know About Floating Point Arithmetic
And something more Java flavoured: How Java’s Floating-Point Hurts Everyone Everywhere
对于金融领域,更常见的是使用 BigDecimal 和相关类。 无论如何,浮点数和双精度数都非常容易受到舍入错误的影响。
您可能想查看 Apache Commons Math 如果您决定尝试 BigDecimal。
For financials it's more common to use BigDecimal and related classes. float and doubles are in any case very susceptible to rounding errors.
You may want to look at Apache Commons Math if you decide to give BigDecimal a try.
一种常见的技术是使用整数并自己记录小数。
例如,您可以决定所有货币金额均以小数点后 3 位的精度表示。 不要写:
您可以写:
因此,当您想打印金额时,
One common technique is to use integers and keep track of the decimals yourself.
For example you can decide that all you currency amount will be represented with 3 decimal points accuracy. So instead of writing:
you write
and when you want to print the amount: