PHP how to use range() for float numbers

488

Is there a way to use PHPrange() for a really small number? like below?

range(0.54,0.58);

Doing this creates an error.

range(): step exceeds the specified range in

220

Answer

Solution:

The third parameter is thestep.
Reading the documentation is a very good place to start.

If you read you will see that you can set the step to something that can increment between your limits.
The error message is simply telling you that it cannot increment 0.54 by 1 without going over 0.58 - think about, it 1 + 0.54 is more than 0.58!

Using this line instead will give you the desired output.

range(0.54, 0.58, 0.01);
908

Answer

Solution:

You should also provide the range you want.

Like this

var_dump(range(0.54,0.58,0.01));

output is

array(4) {
  [0]=>
  float(0.54)
  [1]=>
  float(0.55)
  [2]=>
  float(0.56)
  [3]=>
  float(0.57)
}
903

Answer

Solution:

use the third parameter to set a step

range(0.54,0.58, 0.01);

or you could multiply your values by 1000 and then divide by 1000 which would be silly...

961

Answer

Solution:

The other answers here did not work for me as, due to rounding error with floats, the result is not exact:

  • Depending on the start and end numbers the result is inclusive or exclusive the end number.
  • Additionally in PHP 8 the rounding errors are visible in the result. (Seams to only apply to debug output.)

Examples:

php 7.4: (inclusive vs. exclusive)

php > var_dump(range(0.54, 0.6, 0.01));  
array(6) {
  [0]=>
  float(0.54)
  [1]=>
  float(0.55)
  [2]=>
  float(0.56)
  [3]=>
  float(0.57)
  [4]=>
  float(0.58)
  [5]=>
  float(0.59)
}
php > var_dump(range(0.52, 0.6, 0.01)); 
array(9) {
  [0]=>
  float(0.52)
  [1]=>
  float(0.53)
  [2]=>
  float(0.54)
  [3]=>
  float(0.55)
  [4]=>
  float(0.56)
  [5]=>
  float(0.57)
  [6]=>
  float(0.58)
  [7]=>
  float(0.59)
  [8]=>
  float(0.6)
}

php 8.0: (inclusive vs. exclusive + rounding errors)

php > var_dump(range(0.54, 0.6, 0.01));
array(6) {
  [0]=>
  float(0.54)
  [1]=>
  float(0.55)
  [2]=>
  float(0.56)
  [3]=>
  float(0.5700000000000001)
  [4]=>
  float(0.5800000000000001)
  [5]=>
  float(0.5900000000000001)
}
php > var_dump(range(0.52, 0.6, 0.01));
array(9) {
  [0]=>
  float(0.52)
  [1]=>
  float(0.53)
  [2]=>
  float(0.54)
  [3]=>
  float(0.55)
  [4]=>
  float(0.56)
  [5]=>
  float(0.5700000000000001)
  [6]=>
  float(0.5800000000000001)
  [7]=>
  float(0.5900000000000001)
  [8]=>
  float(0.6)
}

Solution:

This does give my expected result (PHP 7.4 and up):

php > var_dump(array_map(fn($n) => $n/100, range(0.54*100, 0.6*100,  0.01*100)));
array(7) {
  [0]=>
  float(0.54)
  [1]=>
  float(0.55)
  [2]=>
  float(0.56)
  [3]=>
  float(0.57)
  [4]=>
  float(0.58)
  [5]=>
  float(0.59)
  [6]=>
  float(0.6)
}

People are also looking for solutions to the problem: Trying to figure out static variables in PHP

Source

Didn't find the answer?

Our community is visited by hundreds of web development professionals every day. Ask your question and get a quick answer for free.

Ask a Question

Write quick answer

Do you know the answer to this question? Write a quick response to it. With your help, we will make our community stronger.

Similar questions

Find the answer in similar questions on our website.