充100块钱手续费3% 实际应该付103,商家如何通过103元和手续费3%求出到帐金额和手续费
注:手续费3%是可能会变动的,比如说4.37%,5%等不等,求公式就是手续费不是从他冲的100里面扣
是需要额外付费来承担
也就是实际金额=100+(100*(3/100))
反过来怎么算
然而商家这边收到的是103元,和通知到了3%的手续费,并没有实际列出3元和100元,现在就是要算出来然后来列举存入数据库
答:
收到的钱/(100+汇率)*100 结果四舍五入
x+(x*(y/100))=收到的钱
就是解个 二元一次方程
$jine=round($jine/(100+plug_eva('spay','手续费'))*100);
学霸群给出的答案,总感觉不对,因为手续费3%的汇率是不固定的。
另一个学霸群给出的答案
实际金额 ÷ (1 + 3%) = 原始金额
套进去公式我认为这个才是正确的。
本帖最后由 w123rq 于 2015/7/26 22:02 编辑
是的,相当于解一个二元一次方程,但是二元一次方程必须要2个方程才能解出实数解集。
所以是算不出来的,会有N个解。
如果你的充值金额是整数,而且手续费最多是xx.xx%两位小数的话,可以用下面这段,但是还是可能会有多个结果:
<?php
function getlength($num) {
$count = 0;
$temp = explode ( '.', $num );
if (sizeof ( $temp ) > 1) {
$decimal = end ( $temp );
$count = strlen ( $decimal );
}
return $count;
}
if($_GET['act']=="cacula"){
$total=$_POST['total'];
$total_int=intval($_POST['total']);
$i=1;
while($i<=$total){
$result=($total/($total_int-$i))-1;
if(getlength($result)==2){
$rc=$total_int-$i;
$rs=round($result*100,2);
if($rs<=10){//手续费一般不超过10%
?>
Result: Recharge=<?=$rc?> & Tax=<?=$rs?>%<br/>
<?
}
}
$i++;
}
}
?>
<html>
<body>
<form method="POST" action="?act=cacula">
Recharge_points:<input type="text" name="total" /><br/>
<input type="submit" value="Submit"/>
</form>
</body>
</html>
测试结果如上
w123rq 发表于 2015/7/26 21:54
是的,相当于解一个二元一次方程,但是二元一次方程必须要2个方程才能解出实数解集。
所以是算不出来的,会有 ...
<?php
header("Content-type:text/html;charset=utf-8");
if($_GET['act']=="cacula"){
$jk['方案1']=round($_POST['得到的钱']/(100+$_POST['手续费'])*100);
$jk['方案2']=round($_POST['得到的钱']/(1+($_POST['手续费']/100)));
}
?>
<html>
<body>
方案1:<?php echo $jk['方案1']; ?><br/>
方案2:<?php echo $jk['方案2']; ?><br/><br/>
<form method="POST" action="?act=cacula">
手续费:<input type="text" name="手续费" value="<?php echo $_POST['手续费']; ?>"/>%<br/>
收到的钱:<input type="text" name="得到的钱"value="<?php echo $_POST['得到的钱']; ?>"/><br/>
<input type="submit" value="Submit"/>
</form>
</body>
</html>
w123rq 发表于 2015/7/26 21:54
是的,相当于解一个二元一次方程,但是二元一次方程必须要2个方程才能解出实数解集。
所以是算不出来的,会有 ...
66666{:1343:}
本帖最后由 黑色小河 于 2015/7/26 22:49 编辑
w123rq 发表于 2015/7/26 21:54
是的,相当于解一个二元一次方程,但是二元一次方程必须要2个方程才能解出实数解集。
所以是算不出来的,会有 ...
然后 我研究了 很长时间方程 知道方案2 的来法
x是未知y是汇率 z是收到的钱
汇率是管理设置好的z是接口收到的钱
得出一开始的方程应该是这个样的x+x*y=z
解 设 y=3% z=103
所以 y=100 / 3
y=0.03
然后代入原方程
得 x+x*0.03=103
1x+0.03x=103
(1+0.03)x=103
x=103/(1+0.03)【也就是 z/(1+y) 也就是 用户支付的钱/(1+汇率)=用户得到的钱】
x=100 本帖最后由 黑色小河 于 2015/7/26 22:51 编辑
但是方案2 始终想不出怎么得来的 但是方案 1和2 得出的结果始终一样
页:
[1]