From d657046566ffe70c3c2099464224de1a063d19d2 Mon Sep 17 00:00:00 2001 From: Janusz Dobrowolski Date: Sun, 22 Aug 2010 19:26:13 +0000 Subject: [PATCH] Extended number formatting to allow use maximum precision for 'max' specification. --- includes/current_user.inc | 26 ++++++++++++++++++++++++-- js/utils.js | 11 ++++++++--- 2 files changed, 32 insertions(+), 5 deletions(-) diff --git a/includes/current_user.inc b/includes/current_user.inc index ab5073a6..3f950567 100644 --- a/includes/current_user.inc +++ b/includes/current_user.inc @@ -187,14 +187,29 @@ function round2($number, $decimals=0) return round($number+$delta, $decimals); } +/* + Returns number formatted according to user setup and using $decimals digits after dot + (defualt is 0). When $decimals is set to 'max' maximum available precision is used + (decimals depend on value) and trailing zeros are trimmed. +*/ function number_format2($number, $decimals=0) { global $thoseps, $decseps; $tsep = $thoseps[$_SESSION["wa_current_user"]->prefs->tho_sep()]; $dsep = $decseps[$_SESSION["wa_current_user"]->prefs->dec_sep()]; //return number_format($number, $decimals, $dsep, $tsep); - $delta = ($number < 0 ? -.0000000001 : .0000000001); - return number_format($number+$delta, $decimals, $dsep, $tsep); + if($decimals=='max') + $dec = 15 - floor(log10(abs($number))); + else { + $delta = ($number < 0 ? -.0000000001 : .0000000001); + $number += $delta; + $dec = $decimals; + } + + $num = number_format($number, $dec, $dsep, $tsep); + + return $decimals==='max' ? rtrim($num, '0') : $num; + } // // Current ui mode. @@ -248,6 +263,13 @@ function get_qty_dec($stock_id=null) return $dec; } //------------------------------------------------------------------- +// +// Maximum precision format. Strips trailing unsignificant digits. +// +function maxprec_format($number) { + return number_format2($number, null); +} + function exrate_format($number) { return number_format2($number, $_SESSION["wa_current_user"]->prefs->exrate_dec()); diff --git a/js/utils.js b/js/utils.js index 8d707b3d..1f1aa521 100644 --- a/js/utils.js +++ b/js/utils.js @@ -212,14 +212,19 @@ function price_format(post, num, dec, label, color) { if(isNaN(num)) num = "0"; sign = (num == (num = Math.abs(num))); + var max = dec=='max'; + if(max) dec = 15 - Math.floor(Math.log(Math.abs(num))); if(dec<0) dec = 2; decsize = Math.pow(10, dec); num = Math.floor(num*decsize+0.50000000001); cents = num%decsize; num = Math.floor(num/decsize).toString(); - for( i=cents.toString().length; i