【问题标题】:Price + 20% of price in PHP [closed]价格 + PHP 价格的 20% [关闭]
【发布时间】:2019-04-14 16:59:55
【问题描述】:

PHP 新手在这里。我创建了一个根据价格范围提高价格的函数:

function update_price ( $price) {
  If (isset($price) ) {
    if ($price < 60 ) {
      return $price + 40;
    } 
  elseif ($price >= 60 && $price < 100) {
    return $price + 60;
  } 
  elseif ($price >= 100 && $price < 200) {
    return $price + 70;
  }
  elseif ($price >= 200 && $price < 300) {
    return $price + 80;
  }
  elseif ($price >= 300 && $price < 450) {
    return $price + 90;
  }
  elseif ($price >= 450) {
    return $price + ($price * .2);
  }
} 
}

当我导入 CSV 文件时调用该函数。效果很好,除了函数的最后一部分。我正在尝试将这些合格产品的价格提高 20%,因此我采用 $price 并添加 ($price * .2)。但售价 628.74 美元的产品售价为 754,888.00 美元,而不是 754.88 美元。

我做错了什么?

【问题讨论】:

  • 您显示的代码中有很多印刷错误(缺少几个右括号)。很难说到底发生了什么,因为谁知道还有什么可能输入错误。为什么不直接复制/粘贴您想询问的实际代码而不是重新输入?
  • 您的预期结果也有错别字。 $628.74 * 1.2 应该是 $754.488。
  • 潜伏者 - 你是对的。我已经更正了括号。就像我说的,这里是新手,我复制/粘贴了错误的版本。
  • 您的功能运行良好。问题必须在于您如何输出结果。 3v4l.org/nAgcT

标签: php percentage multiplication


【解决方案1】:

我不确定你做了什么给你这个错误,但是

测试代码

$base = 628.74;
$change = round($base * 0.2,2);
$new = $base + $change;
$allatonce = round(($base+($base*0.2)),2);
print_r(array($base,$change,$new,$allatonce));

输出

数组([0] => 628.74 [1] => 125.75 [2] => 754.49 [3] => 754.49)

all at once 值将满足您的需求。

【讨论】:

  • 您能解释一下这与 OP 的原始解决方案有何不同吗?
  • 在 ($price >= 450 之后它不会缺少 ),它也舍入到 2 dp。
【解决方案2】:

PHP 返回 754.488 没关系,它与计算器返回的值相同: 628.74÷5+628.74=754.488

这里你需要将精度四舍五入到 2 个十进制数,这可以通过 round() 函数来完成。

另外,我会这样写你的函数:

    function update_price($price) {
        if((!$price) || (!is_numeric($price)) || ($price <= 0)) // initial price is not valid
                return -1;

        if($price >= 450) return $price+round($price/5, 2, PHP_ROUND_HALF_DOWN);
        if($price >= 300) return $price+90;
        if($price >= 200) return $price+80;
        if($price >= 100) return $price+70;
        if($price >= 60)  return $price+60;
        return $price+40;
}

【讨论】:

  • 你能告诉我“$price/5, 2, PHP_ROUND_HALF_DOWN”是做什么的吗?
  • $price/5 就像在做 $price/100*20 一样,round() 函数会将您的数字四舍五入为 2 个十进制数字。请查看php.net/manual/en/function.round.php
  • 效果很好。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 2023-01-21
  • 2017-07-09
  • 2022-06-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多