php乘法误差,php – 使用除以总和的正确总和,抵消舍入误差

这似乎工作 –

http://jsfiddle.net/nQakD/.

以jQuery为例,但如果你了解PHP,你应该可以轻松地将它转换为PHP.如果你还需要PHP代码,告诉我,我会为你写的.

我也会在这里粘贴代码 –

$(document).ready(function() {

var price = 17.48, people = 4, payment = (price/people).toFixed(2), count=0;

var payments = [];

for(i = 0; i < people; i++) {

payments.push(payment);

}

if(payment*people != price) {

var currentPayment = payment*people;

$(payments).each(function() {

if(currentPayment < price) {

currentPayment = (currentPayment-this).toFixed(2);

var newPayment = parseFloat(this)+0.01;

payments[count] = newPayment.toFixed(2);

currentPayment = parseFloat(currentPayment)+parseFloat(newPayment);

}

else if(currentPayment > price) {

currentPayment = (currentPayment-this).toFixed(2);

var newPayment = parseFloat(this)-0.01;

payments[count] = newPayment.toFixed(2);

currentPayment = parseFloat(currentPayment)+parseFloat(newPayment);

}

count++;

});

}

$(payments).each(function() {

$("#result").append(""+this+"
");

});

});​

编辑:

这是工作的PHP代码 –

$price = 13.34;

$people = 4;

$payment = (float)$price/$people;

$payment = 0.01 * (int)($payment*100);

$count = 0;

$payments = Array();

for($i = 0; $i < $people; $i++) {

array_push($payments, $payment);

}

if($payment*$people != $price) {

$currentPayment = $payment*$people;

foreach($payments as $pay) {

if($currentPayment < $price) {

$currentPayment = $currentPayment-$pay;

$currentPayment = 0.01 * (int)($currentPayment*100);

$newPayment = (float)$pay+0.01;

$newPayment = 0.01 * (int)($newPayment*100);

$payments[$count] = $newPayment;

$currentPayment = (float)$currentPayment+$newPayment;

}

else if($currentPayment > $price) {

$currentPayment = $currentPayment-$pay;

$currentPayment = 0.01 * (int)($currentPayment*100);

$newPayment = (float)$pay-0.01;

$newPayment = 0.01 * (int)($newPayment*100);

$payments[$count] = $newPayment;

$currentPayment = (float)$currentPayment+$newPayment;

}

$count++;

}

}

foreach($payments as $payed) {

echo ''.$payed.'
';

}​​​

编辑2:

编辑3:

编辑了PHP代码和JS代码,因此它适用于所有示例 – http://jsfiddle.net/nQakD/.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值