Extended number formatting to allow use maximum precision for 'max' specification.
authorJanusz Dobrowolski <janusz@frontaccounting.eu>
Sun, 22 Aug 2010 19:26:13 +0000 (19:26 +0000)
committerJanusz Dobrowolski <janusz@frontaccounting.eu>
Sun, 22 Aug 2010 19:26:13 +0000 (19:26 +0000)
includes/current_user.inc
js/utils.js

index ab5073a63d8a95329324c12909689c82b815eab5..3f9505671b8b8bbca515e015fcd3136d41edfce5 100644 (file)
@@ -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());
index 8d707b3dd01682212d6add3644cc0e21f4dfa690..1f1aa521c54a362d31b98326e7971a55022ced13 100644 (file)
@@ -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<dec; i++){
-               cents = "0" + cents;
-       }
+       if (max) // strip trailing 0
+               cents = cents.toString().replace(/0+$/,'');
+       else
+               for( i=cents.toString().length; i<dec; i++){
+                       cents = cents + "0";
+               }
        for (var i = 0; i < Math.floor((num.length-(1+i))/3); i++)
                num = num.substring(0,num.length-(4*i+3))+user.ts+
                        num.substring(num.length-(4*i+3));