Php 如何通过递归找到正确的价格?
首先,你好,对不起,我的英语。所以我的理由是防止一种产品的价格相同。例如,我有3家供应商提供相同的产品,但价格不同Php 如何通过递归找到正确的价格?,php,recursion,Php,Recursion,首先,你好,对不起,我的英语。所以我的理由是防止一种产品的价格相同。例如,我有3家供应商提供相同的产品,但价格不同 product 1 - 12 USD product 1 - 12.1 USD product 1 - 55 USD 如果我的价格是55,我想设置12,程序应该设置12.2。原因12和12.1已被采用。 实际上,我需要找到最接近的,不采取步骤0.1的价格 我的代码不起作用: public function findCorrectClosestPrice($price, $prod
product 1 - 12 USD
product 1 - 12.1 USD
product 1 - 55 USD
如果我的价格是55,我想设置12,程序应该设置12.2。原因12和12.1已被采用。
实际上,我需要找到最接近的,不采取步骤0.1的价格
我的代码不起作用:
public function findCorrectClosestPrice($price, $products)
{
foreach ($products as $product)
{
if ($product->price === $price)
{
$price = $price + 0.1;
return $this->findCorrectClosestPrice($price, $products);
}
else
{
return $price + 0.1;
}
}
return null;
}
有人能告诉我错误在哪里吗?首先我们需要更正代码。因为<代码>如果。。。否则,您将始终在第一个产品上保留
foreach
循环和功能
public function findCorrectClosestPrice($price, $products)
{
foreach ($products as $product)
{
if ($product->price === $price)
{
$price = $price + 0.1;
return $this->findCorrectClosestPrice($price, $products);
}
}
return $price + 0.1;
}
但是您也在处理浮点数,并且使用了=
相同的比较运算符。这可能行不通。简言之:
0.1 + 0.1 === 0.2
可能返回false,因为两侧的浮点值不完全相同
解决办法并不难,只要容忍一点点差别就行了。您可以这样做:
public function findCorrectClosestPrice($price, $products)
{
foreach ($products as $product)
{
if (abs($product->price - $price) < 0.0001)
{
$price = $price + 0.1;
return $this->findCorrectClosestPrice($price, $products);
}
}
return $price + 0.1;
}
公共函数查找正确的关闭价格($price,$products)
{
foreach($products as$product)
{
如果(abs($product->price-$price)<0.0001)
{
$price=$price+0.1;
返回$this->findCorrectClosestPrice($price,$products);
}
}
返回$price+0.1;
}
还有其他方法可以做到这一点,但它们基本上都避免了浮点值中可能出现的细微差异。谢谢!在比较中,我使用round()函数更改了它。如果(round($product->price,1)=round($price,1))是的,
round()
也可以工作,但请记住,在这种情况下,您仍然可以直接比较两个浮点数。这可能会奏效,但相当危险。你可以乘以10,然后把这个数字变成一个整数。这是一种比较数字的安全方法,无需使用阈值。