代码之家  ›  专栏  ›  技术社区  ›  nickf

如何处理PHP中奇怪的浮点取整

  •  8
  • nickf  · 技术社区  · 15 年前

    众所周知,浮点运算并不总是完全准确的,但是如何处理它的不一致性呢?

    例如,在php 5.2.9中: (这在5.3中没有发生)

    echo round(14.99225, 4);  // 14.9923 
    echo round(15.99225, 4);  // 15.9923 
    echo round(16.99225, 4);  // 16.9922 ??
    echo round(17.99225, 4);  // 17.9922 ??
    echo round(25.99225, 4);  // 25.9922 ??
    echo round(26.99225, 4);  // 26.9923
    

    你会怎么解决这个问题?

    2 回复  |  直到 15 年前
        1
  •  8
  •   Ignacio Vazquez-Abrams    15 年前

    欢迎来到IEEE754, enjoy your stay .

    使用 bc gmp 相反。

        2
  •  4
  •   Michael Borgwardt    15 年前

    你如何处理它 不一致?

    • 对于基于十进制表示的精确结果很重要的东西(即金钱)。 不要使用 IEEE754浮动,您使用“bignum”库,例如 BCMath
    • 对于那些你只需要计算的东西 相当地 精确(像大多数科学计算一样),你使用 numerically stable 使不一致保持在最低有效位的算法(它们不重要)。