PHP : The awk subtraction giving exponential values

限于喜欢 提交于 2019-12-11 01:55:18

问题


I am getting awk result when I am subtracting two values, the error is I am getting exponent value 2.7755575615629E-17 instead of 0. Anything I am missing to apply, please suggest. These is happening with some cases only like 0.66, 0.67, 0.33,

The prototype of the code I am using is given below,

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

But on reversing the values It all fine with 0

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

回答1:


It is a common problem in computer languages - float values aren't represented exactly. See also http://en.wikipedia.org/wiki/Floating_point#Accuracy_problems. If you have a particular amount of decimal places you want to exactly calculate with, you can use the bcmath functions in PHP:

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

Otherwise you can simply use your calculation and add an round($result, $numberOfDecimalPlaces) to you calculated result.




回答2:


This is because its the floating point numbers. And as per the manual

"The size of a float is platform-dependent, although a maximum of ~1.8e308 with a precision of roughly 14 decimal digits is a common value (the 64 bit IEEE format). "

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

Now there are 2 things which could be done by using the type cast your result to (int) or round up the result.

The other option is to use the sprintf

Here is an example

$a  = 0.00001234;
echo $a ;

The output will be as

1.234E-5

Now if we do

echo (int)$a ;
The output is 0

or

echo round($a) ;

output will be 0

And finally if we do

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

We will get 0.000012


来源:https://stackoverflow.com/questions/21598667/php-the-awk-subtraction-giving-exponential-values

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!