Also, for my benefit, what is finalTotal in comparison to total and finalTotalAmount? My interpretation is finalTotalAmount is the amount after discount has been applied; total is the amount before discount.
Stepping through the code in your Gist, these are the expected values I would expect to see:
validate: function() {
this.$http.get('/coupons/' + this.coupon.code)
.success(function(coupon, finalTotal) { // what is finalTotal???
this.coupon = coupon; // this.coupon.discount = 10
this.valid = true;
this.coupon.description = 'Great! You entered a valid coupon.';
discountPercentage = this.coupon.discount/100; // 10 / 100 = 0.1
discountAmount = this.total*(this.discountPercentage); // 27.99 * 0.1 = 2.7.9
discountedTotal = this.total - this.discountAmount; // 27.99 - 2.799 = 25.191
this.total = Math.round(this.discountedTotal * 100); // 2519 <== £25.19
this.$set('finalTotalAmount', this.total);
})
Is your project on github?