# PHP Floating-point precision operation

Source: Internet
Author: User

BC is the abbreviation of binary calculator. The arguments for the bc* function are the operands plus an optional [int scale], such as String Bcadd (String \$left _operand, String \$right _operand[, int \$scale]), if scale does not provide , the default value of Bcscale is used. The large number is directly represented by a string of 0-9, and the result returns a string.

bccomp-compares two high-precision digits, returns-1, 0, 1
bcdiv-divides two high-precision digits
bcmod-to find high precision digit remainder
Bcmul-multiplies two high precision numbers
bcpow-to find high precision digital exponentiation
Bcpowmod-to seek high-precision digital exponentiation, the number theory is very common
bcscale-Configure the default decimal point number, which is equivalent to the "scale=" in Linux BC
bcsqrt-High precision Digital square root
bcsub-subtracts two high-precision digits

First look at a piece of code:

\$a = 0.1;
\$b = 0.7;
Var_dump ((\$a + \$b) = = 0.8);

The printed value is Boolean false

Why is that? The PHP manual has the following warning message for floating-point numbers:

Warning
Floating-point precision
Obviously a simple decimal score like 0.1 or 0.7 cannot be converted to an internal binary format without losing a little bit of precision. This can result in confusing results: for example, Floor (0.1+0.7) *10 usually returns 7 rather than the expected 8 because the internal representation of the result is actually similar to 7.9999999999 ....
This is related to the fact that it is impossible to accurately express certain decimal points with a finite number of digits. For example, the decimal 1/3 becomes 0.3333333. . .。
So never believe that floating-point numbers are accurate to the last one, and never compare two floating-point numbers for equality. If you do need higher precision, you should use arbitrary precision mathematical functions or GMP functions

So the formula above should be rewritten as

\$a = 0.1;
\$b = 0.7;
Var_dump (Bcadd (\$a, \$b, 2) = = 0.8);

So we can solve the problem of floating point counting.

Related Keywords:
Related Article ## Alibaba Cloud 10 Year Anniversary

With You, We are Shaping a Digital World, 2009-2019 ## Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China ## Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth \$300-1200 USD