【问题标题】:Converting representation from decimal to floating point numbers - pitfalls将表示形式从十进制数转换为浮点数 - 陷阱
【发布时间】:2009-11-10 02:35:08
【问题描述】:

我正在开发一个金融应用程序中的一些功能。在代码和数据库中,所有数字都表示为小数,没有四舍五入错误。但是,我遇到了一些性能问题,我正在考虑在我自己的计算中切换到浮点数(float/double)。这是基于舍入误差不是问题的假设(我必须与客户核实)。

但是,如果我进行此转换,我想知道有哪些陷阱。是否有一种表达式在使用浮点数计算时可能与使用小数计算的相同表达式有很大不同?

【问题讨论】:

    标签: floating-point decimal


    【解决方案1】:

    使用浮点数的问题是您最终会遇到(可能)意想不到的精度问题。

    如果您使用浮点数,那么您可以正确表示的最大值将是 $167,772.16。如果你使用 double,那么最大值会更好(大约 180 万亿美元)。

    您是否考虑过使用表示 0.01 美元间隔的直接 int 或 long(32 位或 64 位)?这样,您可以更好地控制值,但性能应该很好。您还可以将它们包装在一个结构中,以使其更易于与标准数学运算符一起使用。

    【讨论】:

      【解决方案2】:

      金融应用程序通常是使用浮点数的第一个例子。所以要小心。

      不管怎样,this article 比你想知道的更多关于浮点的知识。它主要是关于 D 编程语言的,但它有很多一般有用的东西要知道。

      【讨论】:

      • 我知道使用浮点有点不正统,但是,在我的模块中完成的一些计算已经使用浮点完成,因为使用十进制计算它们是不可行的。最后,客户(由数学家代表)必须做出决定。
      猜你喜欢
      • 1970-01-01
      • 2014-03-01
      • 1970-01-01
      • 2011-08-11
      • 2016-03-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-08
      相关资源
      最近更新 更多