PDA

View Full Version : Rounging problem in php


info4753
03-14-2009, 12:53 AM
I addressed this problem as a ticket but didn't get it solved there. The Webassist supporter didn't give any more answers nor informed me if he's working on it.

Our shop runs in swiss francs, means I have to round the cents in 0.05 steps. The round problem appears when a discount for wine is applied. I have the solution in ASP but need help to change it to php:

The discount (WeineMengenrabatt) for wines (PRODKATID=7) is 3% for orders of more than 24 up to 47 bottles:

<%
function WAEC_WeineMengenrabatt()
totalDiscount = 0
if ((WA_eCart_ConditionalTotal(Ullrich_eCart, "Quantity", "PRODKATID", "7") >= 24) AND (WA_eCart_ConditionalTotal(Ullrich_eCart, "Quantity", "PRODKATID", "7") <= 47)) then
totalDiscount = totalDiscount + (Round((WA_eCart_ConditionalTotal(Ullrich_eCart, "TotalPrice", "PRODKATID", "7") * cDbl(0.03))* 20))/20'Result
end if
WAEC_WeineMengenrabatt = WA_eCart_FormatNumber(totalDiscount, Ullrich_eCart.ForceDecimalsC, Ullrich_eCart.DecimalPlacesC)
end function
%>

The current php code is:

function WAEC_eCartUllrich_Weinrabatt3() {
$totalDiscount = 0;
if (true && (($this->ConditionalTotal("Quantity", "PRODKATID", "7") >= 24) && ($this->ConditionalTotal("Quantity", "PRODKATID", "7") <= 47))) {
$totalDiscount += ($this->ConditionalTotal("TotalPrice", "PRODKATID", "7") * 0.03);//Result
}
return WA_eCart_FormatNumber($totalDiscount, $this->ForceDecimalsC, $this->DecimalPlacesC);
}

The code for showing up the discount is in ASP

<%= FormatNumber(WAEC_WeineMengenrabatt(), 2, -2, -2, -2) %>

The current php code is:

<?php echo WA_eCart_DisplayMoney($eCartUllrich, $eCartUllrich->RuleLooperValue("Discounts")); ?>

Ray Borduin
03-14-2009, 07:25 AM
I'm not exactly sure, but I think this might work:


return WA_eCart_FormatNumber($totalDiscount, round(($this->ForceDecimalsC, $this->DecimalPlacesC,1)*2)/2);

I think that would round the result to the nearest 0.05

Ray Borduin
03-14-2009, 07:27 AM
or actually I think it would be:


return WA_eCart_FormatNumber($totalDiscount, round(($this->ForceDecimalsC, $this->DecimalPlacesC*2,1))/2);

info4753
03-14-2009, 08:10 AM
Thanks for your help Ray.

It looks like

return round(WA_eCart_FormatNumber($totalDiscount, $this->ForceDecimalsC, $this->DecimalPlacesC)*2,1)/2;

is working ...