如何处理PHP中奇怪的浮点数舍入

时间:2010-02-12 00:31:18

标签: php floating-point rounding

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

例如,在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 个答案:

答案 0 :(得分:8)

欢迎使用IEEE754,enjoy your stay

改为使用bcgmp

答案 1 :(得分:4)

  

你如何处理它   不一致?

  • 对于基于十进制表示的确切结果(即金钱),不使用 IEEE754浮点数的东西,您使用像BCMath这样的“bignum”库
  • 对于您只需要计算相对精确的东西(如大多数科学计算),您使用numerically stable算法,以便不一致性保留在最低有效位(它们在哪里)无所谓)。