From 94cb33f6b0a043d61b7205db5e44ca986e3be524 Mon Sep 17 00:00:00 2001 From: Joe Hunt Date: Wed, 8 Feb 2012 00:42:33 +0100 Subject: [PATCH] Rounding error in includes/ui/ui_view.inc -> price_in_words() --- includes/ui/ui_view.inc | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/includes/ui/ui_view.inc b/includes/ui/ui_view.inc index 14d1eb02..00c0cd0c 100644 --- a/includes/ui/ui_view.inc +++ b/includes/ui/ui_view.inc @@ -773,9 +773,15 @@ function price_in_words($amount, $document=0) $dec = user_price_dec(); if ($dec > 0) { - $divisor = pow(10, $dec); - $frac = round2($amount - floor($amount), $dec) * $divisor; - $frac = sprintf("%0{$dec}d", $frac); + $divisor = pow(10, $dec); + // algorithm rewritten due to a bug in sprintf (wrong with frac, 29, 57 and more). + $frac = round2($amount - floor($amount), $dec) * $divisor; + for ($div = $divisor / 10; $div > 1; $div /= 10) + { + if ($frac < $div) + $frac = "0" . $frac; + } + //$frac = sprintf("%0{$dec}d", $frac); $and = _("and"); $frac = " $and $frac/$divisor"; } -- 2.30.2