【发布时间】:2009-11-10 02:35:08
【问题描述】:
我正在开发一个金融应用程序中的一些功能。在代码和数据库中,所有数字都表示为小数,没有四舍五入错误。但是,我遇到了一些性能问题,我正在考虑在我自己的计算中切换到浮点数(float/double)。这是基于舍入误差不是问题的假设(我必须与客户核实)。
但是,如果我进行此转换,我想知道有哪些陷阱。是否有一种表达式在使用浮点数计算时可能与使用小数计算的相同表达式有很大不同?
【问题讨论】:
我正在开发一个金融应用程序中的一些功能。在代码和数据库中,所有数字都表示为小数,没有四舍五入错误。但是,我遇到了一些性能问题,我正在考虑在我自己的计算中切换到浮点数(float/double)。这是基于舍入误差不是问题的假设(我必须与客户核实)。
但是,如果我进行此转换,我想知道有哪些陷阱。是否有一种表达式在使用浮点数计算时可能与使用小数计算的相同表达式有很大不同?
【问题讨论】:
使用浮点数的问题是您最终会遇到(可能)意想不到的精度问题。
如果您使用浮点数,那么您可以正确表示的最大值将是 $167,772.16。如果你使用 double,那么最大值会更好(大约 180 万亿美元)。
您是否考虑过使用表示 0.01 美元间隔的直接 int 或 long(32 位或 64 位)?这样,您可以更好地控制值,但性能应该很好。您还可以将它们包装在一个结构中,以使其更易于与标准数学运算符一起使用。
【讨论】:
金融应用程序通常是不使用浮点数的第一个例子。所以要小心。
不管怎样,this article 比你想知道的更多关于浮点的知识。它主要是关于 D 编程语言的,但它有很多一般有用的东西要知道。
【讨论】: