PHP:awk减法给出指数值

时间:2014-02-06 09:25:51

标签: php awk session-variables

当我减去两个值时,我得到awk结果,错误是我得到指数值2.7755575615629E-17而不是0.我想要申请的任何东西,请建议。这些情况发生在某些情况下,例如0.66,0.67,0.33,

我正在使用的代码的原型如下,

                    $_SESSION['x'] = 1;
            $_SESSION['x'] = $_SESSION['x'] - 0.83;
            echo ( $_SESSION['x']- 0.17) ;
            echo '<br>';

但在扭转价值时,这一切都很好,0

                    $_SESSION['x'] = 1;
            $_SESSION['x'] = $_SESSION['x'] - 0.17;
            echo ( $_SESSION['x']- 0.83) ;
            echo '<br>';

2 个答案:

答案 0 :(得分:3)

这是因为它的浮点数。并根据手册

“浮点数的大小取决于平台,但最大值为1.8e308,精度约为14位十进制数是一个常见值(64位IEEE格式)。”

http://php.net/manual/en/language.types.float.php

现在有两件事可以通过使用将结果转换为(int)或向上舍入结果来完成。

另一种选择是使用sprintf

这是一个例子

$a  = 0.00001234;
echo $a ;

输出将为

1.234E-5

现在,如果我们这样做

echo (int)$a ;
The output is 0

echo round($a) ;

output will be 0

最后,如果我们这样做

echo sprintf('%f', $a);

We will get 0.000012

答案 1 :(得分:2)

这是计算机语言中的常见问题 - 浮点值未准确表示。另见http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems。如果您想要精确计算特定数量的小数位,可以使用PHP中的bcmath函数:

$_SESSION['x'] = 1;
$_SESSION['x'] = bcsub($_SESSION['x'], 0.83, 10);
echo bcsub($_SESSION['x'], 0.17, 10);
echo '<br>';

否则,您只需使用计算并为计算结果添加round($result, $numberOfDecimalPlaces)