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.
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());
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));