首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >计算PHP后输出错误

计算PHP后输出错误
EN

Stack Overflow用户
提问于 2014-02-21 05:08:18
回答 4查看 549关注 0票数 0

我在用PHP进行计算时遇到了一点问题。输出回声具有错误的值。例如,3500的回声应为475。结果我得到了525分?我哪里错了?

我正在尝试创建一个计算服务费的系统。费用将由sum自动生成。2500欧元的前半部分,手续费是15%。对于第二部分( 2500和5000之间的部分)的费用将是10%等。我已经写了以下代码,但我的输出(回声)是不正确的。如果没有exit;,它只会继续循环。我的代码出了什么问题?有没有人有建议。我是一个PHP newbee BTW,所以任何帮助都将不胜感激!

代码语言:javascript
复制
<?

### Sum ###
$som = 3500; // example sum 3500 (2500 first part 15% / 1000 second part 10%)

/* Output should be with 3500 : 
15% of 2500 = 375 + 10% of 1000 = 100 (part above 2500) TOTAL of 475. 
My output is 525??? :s */


### 15% first 2500 ###
if ($som < 2500); {
$uitkomst = $som / 100 * 15; 
echo $uitkomst;
exit; }

### 10% between 2500 - 5000 ###
if ($som >2500 && $som < 5000); {   
$iv1 = 2500 / 100 * 15;
$ts = $som - 2500;
$iv2 = $ts / 100 * 10;
$iv1 + $iv2 = $uitkomst; 
echo $uitkomst;
exit; }

### 5% between 5000 - 10.000 ###
if ($som >5000 && $som <10000); {   
$iv1 = 2500 / 100 * 15;
$iv2 = 2500 / 100 * 10;
$ts = $som - 5000;
$iv3 = $ts / 100 * 5;
$iv1 + $iv2 + $iv3 = $uitkomst; 
echo $uitkomst; 
exit; }

### 1% between 10.000 and 200.000 ###
if ($som >10000 && $som <200000); { 
$iv1 = 2500 / 100 * 15;
$iv2 = 2500 / 100 * 10;
$iv3 = 5000 / 100 * 5;
$ts = $som - 10000;
$iv4 = $ts / 100 * 1;
$iv1 + $iv2 + $iv3 + $iv4 = $uitkomst; 
echo $uitkomst;
exit; }

### 0.5% over 200.000 ###
if ($som >200000); {    
$iv1 = 2500 / 100 * 15;
$iv2 = 2500 / 100 * 10;
$iv3 = 5000 / 100 * 5;
$iv4 = 190000 / 100 * 1;
$ts = $som - 200000;
$iv5 = $ts / 100 * 0.5;
$iv1 + $iv2 + $iv3 + $iv4 + $iv5 = $uitkomst; 
echo $uitkomst;
exit; }
?>
EN

回答 4

Stack Overflow用户

发布于 2014-02-21 05:14:33

你的代码有几处地方有问题。

首先,您有一个执行变量赋值的条件语句,但变量是条件的局部变量,因此,如果条件不为真,则永远不会将变量赋值给以后使用

代码语言:javascript
复制
$uitkomst = 0; //you need to add this.
if ($som < 2500); {
$uitkomst = $som / 100 * 15; 

下一个问题是您的变量赋值是向后的,php是从左到右的,而不是从右到左的,在下面的语句中,您将$uitkomst的值赋给$iv2$iv2

代码语言:javascript
复制
$iv1 + $iv2 = $uitkomst;

需要满足以下条件:

代码语言:javascript
复制
$uitkomst = $iv1 + $iv2;

并且需要在代码的多个位置进行调整。

最后,在你的条件语句后面有;,虽然我根本不确定它是如何工作的,但这些都需要删除:

代码语言:javascript
复制
if ($som >10000 && $som <200000); { 

需要更改为:

代码语言:javascript
复制
if ($som >10000 && $som <200000){ 

并且需要在代码的多个位置进行调整。

票数 1
EN

Stack Overflow用户

发布于 2014-02-21 05:15:33

您的if语句为空:

代码语言:javascript
复制
if ($som >2500 && $som < 5000); 

去掉“;”

另外,养成用括号括起测试的习惯。

代码语言:javascript
复制
if(($som >10000) && ($som <200000))
票数 1
EN

Stack Overflow用户

发布于 2014-02-21 05:25:12

这里有一个更好的方法。根据需要添加任意数量的规则。

代码语言:javascript
复制
<?php

### Sum ###
$som = 3500; // example sum 3500 (2500 first part 15% / 1000 second part 10%)

$rules = array(
    // lower bound => array( 
    //    'percent' => percent to charge for this rule, 
    //    'upper' => upper bound for this rule 
    // )
    0 => array( 'percent' => 0.15, 'upper' => 2500 ),
    2500 => array( 'percent' => 0.10, 'upper' => 5000 ),
    5000 => array( 'percent' => 0.05, 'upper' => 10000 ),
    10000 => array( 'percent' => 0.01, 'upper' => 200000 ),
    200000 => array( 'percent' => 0.005, 'upper' => null ), 
);

$fee = 0;
$toCalculate = $som;
foreach( $rules as $lower => $rule ) {
    // If there's nothing left to calculate, break
    if($toCalculate <= 0) break;

    $rule['upper'] = $rule['upper'] ? $rule['upper'] : $toCalculate;

    // Amount to apply the current fee percent to
    $current = min($rule['upper'], $toCalculate);

    // Add fee generated by current rule
    $fee += $rule['percent'] * $current;
    $toCalculate -= $current;
}

echo 'Fee: ' . $fee;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/21919629

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档