繁体   English   中英

PHP中的浮点减法问题

[英]Floating point subtraction issue in PHP

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

(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
)

有关为什么发生这种情况的说明,请参见此处:

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

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

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

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

您需要使用函数使用PHP中的浮点数来获得准确的结果。 尝试使用专门用于bcsub函数的http://de2.php.net/manual/zh/ref.bc.php ,并明确告诉它您想要多少个精度的小数位。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM