Php 查找小数范围内的所有数字

Php 查找小数范围内的所有数字,php,math,Php,Math,我编写了以下函数 function range_gen($num1,$num2){ $exp = explode('.',$num1); $accuracy = strlen($exp[1]); $dp = array( 0=>1, 1=>0.1, 2=>0.01, 3=>0.001, 4=>0.0001); foreach ($dp as $key=>$acc) {

我编写了以下函数

 function range_gen($num1,$num2){


    $exp = explode('.',$num1);

    $accuracy = strlen($exp[1]);

    $dp = array(
    0=>1,
    1=>0.1,
    2=>0.01,
    3=>0.001,
    4=>0.0001);


    foreach ($dp as $key=>$acc)
    {
      if ($accuracy ==$key){
        $step = $acc;
      }
    }


      foreach (range($num1, $num2 ,$step) as $number) {
          $ans.= "\"".$number."\",";
      }
        echo trim($ans,",");
    }
如果我给它两个值,比如20.49和20.51,那么结果是20.49,20.5,20.51

我怎样才能把20.5变成20.50

谢谢
Rob

您应该看看函数

echo number_format($number, 2);
示例:

$formatted=sprintf('%.2f',2.5)

您应该查看函数

echo number_format($number, 2);
示例:
$formatted=sprintf('%.2f',2.5)

您无法“获取”20.5,因为php将自动截断尾随的十进制0。但是,当您使用
echo
打印号码时,您可以将其格式化:

echo number_format($number, 2);
在您的循环中,可以这样做:

$x=20.5;
$str = sprintf("%.2f", $x);
var_dump($str);
你可以有这样的东西:

foreach (range($num1, $num2 ,$step) as $number) {
      $ans.= "\"".number_format($number,2)."\",";
  }
您不能“获取”20.5,因为php将自动截断尾随的十进制0。但是,当您使用
echo
打印号码时,您可以将其格式化:

echo number_format($number, 2);
在您的循环中,可以这样做:

$x=20.5;
$str = sprintf("%.2f", $x);
var_dump($str);
你可以有这样的东西:

foreach (range($num1, $num2 ,$step) as $number) {
      $ans.= "\"".number_format($number,2)."\",";
  }
选择权 数字格式() 这是PHP函数的域

echo number_format($number, 2);
使用循环代码的示例:

foreach (range($num1, $num2 ,$step) as $number) {
    $ans .= '"' . number_format($number,2) . '",';
}
foreach (range($num1, $num2 ,$step) as $number) {
    $ans .= '"' . sprintf("%.2f", $number) . '",';
}
sprintf() 另一种选择是使用:

使用循环代码的示例:

foreach (range($num1, $num2 ,$step) as $number) {
    $ans .= '"' . number_format($number,2) . '",';
}
foreach (range($num1, $num2 ,$step) as $number) {
    $ans .= '"' . sprintf("%.2f", $number) . '",';
}
我会怎么做 选择权 数字格式() 这是PHP函数的域

echo number_format($number, 2);
使用循环代码的示例:

foreach (range($num1, $num2 ,$step) as $number) {
    $ans .= '"' . number_format($number,2) . '",';
}
foreach (range($num1, $num2 ,$step) as $number) {
    $ans .= '"' . sprintf("%.2f", $number) . '",';
}
sprintf() 另一种选择是使用:

使用循环代码的示例:

foreach (range($num1, $num2 ,$step) as $number) {
    $ans .= '"' . number_format($number,2) . '",';
}
foreach (range($num1, $num2 ,$step) as $number) {
    $ans .= '"' . sprintf("%.2f", $number) . '",';
}
我会怎么做 试试这个:

string number_format ( float $number , int $decimals = 0 )
试试这个:

string number_format ( float $number , int $decimals = 0 )
这样使用:

$x=20.5;
$str = sprintf("%.2f", $x);
var_dump($str);
输出:

字符串(5)“20.50”

如下使用:

$x=20.5;
$str = sprintf("%.2f", $x);
var_dump($str);
输出:


字符串(5)“20.50”

哦,天哪,我们需要一个参考问题。浮点数是不精确的,尤其是当您要表示的数字的分母不是2的幂时。但这并不是你最大的问题:这个函数的基本原理是有缺陷的。它应该为输入输出什么
(0,0.23)
?什么是
(0.000000001,0.00000000 4)
(它目前崩溃得很厉害),
(-2e-18,-3e-18)
,或者
(1/3,2/3)
?您将如何编写它?我知道这很粗糙,但就我的目的而言,这很有效。哦,天哪,我们需要一个参考问题。浮点数是不精确的,尤其是当您要表示的数字的分母不是2的幂时。但这并不是你最大的问题:这个函数的基本原理是有缺陷的。它应该为输入输出什么
(0,0.23)
?什么是
(0.000000001,0.00000000 4)
(它目前崩溃得很厉害),
(-2e-18,-3e-18)
,或者
(1/3,2/3)
?您将如何编写它?我知道它很粗糙,但对我来说,这很管用。