PHP:给出指数值的awk减法

PHP:给出指数值的awk减法,php,awk,session-variables,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.1

当我减去两个值时,我得到的是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>';
$\u会话['x']=1;
$_会话['x']=$_会话['x']-0.83;
echo($_会话['x']-0.17);
回声“
”;
但是,在反转这些值时,可以使用0

                    $_SESSION['x'] = 1;
            $_SESSION['x'] = $_SESSION['x'] - 0.17;
            echo ( $_SESSION['x']- 0.83) ;
            echo '<br>';
$\u会话['x']=1;
$_会话['x']=$_会话['x']-0.17;
echo($_会话['x']-0.83);
回声“
”;
这是计算机语言中的一个常见问题-浮点值不能准确表示。另见。如果要精确计算小数位数,可以使用PHP中的
bcmath
函数:

$_SESSION['x'] = 1;
$_SESSION['x'] = bcsub($_SESSION['x'], 0.83, 10);
echo bcsub($_SESSION['x'], 0.17, 10);
echo '<br>';
$\u会话['x']=1;
$_SESSION['x']=bcsub($_SESSION['x'],0.83,10);
echo bcsub($_SESSION['x'],0.17,10);
回声“
”;

否则,您只需使用您的计算并向计算结果添加一个
舍入($result,$numberOfDecimalPlaces)

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

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

现在有两件事可以通过使用类型将结果强制转换为(int)或对结果进行取整来完成

另一个选择是使用

这里有一个例子

$a  = 0.00001234;
echo $a ;
输出结果如下所示

1.234E-5
现在如果我们这样做了

echo (int)$a ;
The output is 0
echo sprintf('%f', $a);

We will get 0.000012

最后,如果我们这样做了

echo (int)$a ;
The output is 0
echo sprintf('%f', $a);

We will get 0.000012

谢谢,它起作用了。。我使用了round func,但fgt在sub之后应用它,我只在除法部分使用它(在原始代码片段中)…这和awk有什么关系???