我在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; }
?>
答案 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之后和之后退出......