计算PHP后输出错误

时间:2014-02-20 21:08:18

标签: php percentage

我在PHP中计算时遇到了一些问题。输出回显的值不正确。例如3500的回声应该是475.相反,我得到525?我哪里错了?

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

<?

### 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; }
?>

4 个答案:

答案 0 :(得分:1)

您的代码存在一些问题。

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

$uitkomst = 0; //you need to add this.
if ($som < 2500); {
$uitkomst = $som / 100 * 15; 

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

$iv2

需要:

$iv1 + $iv2 = $uitkomst;

需要在代码的几个位置进行调整。

最后,在条件陈述之后,你有$uitkomst = $iv1 + $iv2; 的踪迹。虽然我甚至不确定它的功能如何,但这些都需要删除:

;

需要改为:

if ($som >10000 && $som <200000); { 

需要在代码的几个位置进行调整。

答案 1 :(得分:1)

你的if语句是空的:

if ($som >2500 && $som < 5000); 

失去';'

同样,养成将测试括在括号中的习惯,例如

if(($som >10000) && ($som <200000))

答案 2 :(得分:1)

这是一个更好的方法。添加尽可能多的规则。

<?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;

答案 3 :(得分:0)

$iv1 + $iv2 = $uitkomst; 

问题出在这里,它是:$ uitkomst = $ iv1 + $ iv2;因为,在php和其他语言中,赋值是:$ var = val;反之亦然...我建议你使用elseif并做回声,在elseif之后和之后退出......