PHP中的浮点减法问题

时间:2016-03-11 01:38:06

标签: php floating-point

这是一个非常简单的复制问题。我正在使用浮点数进行简单的减法。从下面的代码和相应的输出中可以看出,计算结果不正确。

(OSX El Capitan上的php 5.6.6)

<?php

    $bal = 20017.1;
    $amt = 20000;
    $newbal = $bal - $amt;

    print_r(compact('bal', 'amt', 'newbal'));
    echo "\n";

从这个输出中可以看出,$ newbal不正确。

Array
(
    [bal] => 20017.1
    [amt] => 20000
    [newbal] => 17.099999999999
)

2 个答案:

答案 0 :(得分:3)

有关为何发生这种情况的解释,请参阅此处:

http://floating-point-gui.de/

如果您事先知道所需的精度,一个简单的解决方案是使用bcsub()方法:

$bal = 20017.1;
$amt = 20000;
$newbal = bcsub($bal,$amt,1); // 17.1

工作示例:https://3v4l.org/PZ4qS

答案 1 :(得分:0)

您需要使用函数来获取PHP中浮点数的准确结果。尝试使用http://de2.php.net/manual/en/ref.bc.php特别是bcsub函数,并明确告诉它你想要多少小数位数。