Ontonomo
Ontonomo

Reputation: 557

How do I get cart checkout price exact to the penny using Javascript?

How do I get cart checkout price exact to the penny using Javascript?

Right now after taking out all of the trial .rounds etc I was trying.. I am coming up 1.5 cents too high using a high 15 products/prices to test.

            for (var i = 0; i < Cookie.products.length; i++) {
            boolActive = Cookie.products[i].og_active;              
            if (boolActive)
            {
                itemPrice = Cookie.products[i].price;
                itemQty = Cookie.products[i].quantity;
                itemDiscountPercent = Cookie.products[i].discount_percent;

                subtotal = itemPrice * itemQty;
                priceDiscount = (subtotal * itemDiscountPercent);
                                    discountAmount += priceDiscount;
            }
        }
        if (!isNaN(discountAmount))
        { 
            var newCartTotal = (cartTotal - priceDiscount);
            alert("New Cart Total: " + newCartTotal);
        }

Upvotes: 1

Views: 251

Answers (3)

herostwist
herostwist

Reputation: 3968

modify your code to :

priceDiscount = parseFloat( (subtotal * itemDiscountPercent).toFixed(2) );

and:

newCartTotal = parseFloat( (cartTotal - priceDiscount).toFixed(2) );

Upvotes: 0

user578895
user578895

Reputation:

var newCartTotal = (cartTotal - pricediscount).toFixed(2)

that will give you the value, but it will be a string. If you need it to stay numeric, use:

var newCartTotal = ((cartTotal - pricediscount * 100) << 0) / 100;

Upvotes: 1

phoog
phoog

Reputation: 43056

You need to round the discount for each line item: priceDiscount = round_to_hundredth(subtotal * itemDiscountPercent)

Note that this result may not agree with the result you'd get if you add the unrounded results and then round the sum. However, this is the way invoices usually work when calculated by hand (especially since each item can have a different discount percent, so the discount is calculated for each line).

I think you left out a line saying discountAmount += priceDiscount.

Upvotes: 0

Related Questions