我有一个百分比逻辑问题,我真的不明白如何处理它。让我与大家分享一下:
我接到一项任务,在某些时候我需要检查一些养老金收入(我认为它的价值)是否低于当前收入的70%。如果是这样,设置一个标志。都好。问题是我收到了一个测试应该如何的示例:
Given my income on my pension is <percentage>% of my current
Then the status should be <status>
Example:
|percentage| status |
|100 | true |
|71 | true |
|68 | false |
|20 | false |
我创建了一个找到这个百分比的函数,因为其他方式不知道如何获取它,只有在test中给出动态值:
public function findPensionIncomePercentageFromTheCurrent()
{
$pensionIncome = $this->getPensionIncome();
$totalCurrentIncome = $this->getTotalCurrentIncome();
if ($pensionIncome !== 0 && $totalCurrentIncome !== 0) {
$percentage = (int) round(($pensionIncome/$totalCurrentIncome) * 100, 0);
return $percentage;
}
return false;
}
好的,这是百分比。我还创建了另一个从当前收入中计算70%的函数。最后,我尝试将上述功能的百分比与养老金收入的70%进行比较。但我意识到,只有当我再次将百分比乘以当前收入时才会有效:
$currentIncome = $this->getTotalCurrentIncome();
$70percentageOfCurrentIncome = 70% * $currentIncome;
$result = $this->findPensionIncomePercentageFromTheCurrent() * $currentIncome;
if ($result < $70percentageOfCurrentIncome)
$this->setTrue(true);
else {
$this->setFalse(false);
你认为我做得怎么样?我问,因为我发现有点奇怪的是通过a/b * 100
找到百分比,然后再用b
再次乘以该百分比以获得结果。我觉得我做得不好。
有什么建议吗?
答案 0 :(得分:1)
确切地说,技术百分比是一个对应于一个比例的数字。
因此,如果您的收入为1000且养老金为300,那么养老金与收入的比例在数字方面 0.3 而不是30%。
这是你应该做的:
public function findPensionIncomePercentageFromTheCurrent()
{
$pensionIncome = $this->getPensionIncome();
$totalCurrentIncome = $this->getTotalCurrentIncome();
if ($pensionIncome !== 0 && $totalCurrentIncome !== 0) {
$percentage = ($pensionIncome/$totalCurrentIncome);
return $percentage;
}
return false;
}
那将是一个问题:
$currentIncome = $this->getTotalCurrentIncome();
//0.7 is the real percentage value,
//70% is just something people use because we like whole numbers more
$threshold = 0.7 * $currentIncome;
$result = $this->findPensionIncomePercentageFromTheCurrent() * $currentIncome;
if ($result < $threshold)
$this->setTrue(true);
else {
$this->setFalse(false);
现在需要注意的是,如果您需要向需要执行以下操作的人员显示百分比:
echo round($percentage*100). "%"; //Would print something like 70%