Adding OpenLayers.Number.format for string formatted numbers. Thanks for initiating this Andreas. Nice pairing with you. r=me (closes #1253)
git-svn-id: http://svn.openlayers.org/trunk/openlayers@5686 dc9f47b5-9b13-0410-9fdd-eb0c1a62fdaf
This commit is contained in:
@@ -213,6 +213,19 @@ if (!String.prototype.camelize) {
|
|||||||
*********************/
|
*********************/
|
||||||
|
|
||||||
OpenLayers.Number = {
|
OpenLayers.Number = {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Property: OpenLayers.Number.decimalSeparator
|
||||||
|
* Decimal separator to use when formatting numbers.
|
||||||
|
*/
|
||||||
|
decimalSeparator: ".",
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Property: OpenLayers.Number.thousandsSeparator
|
||||||
|
* Thousands separator to use when formatting numbers.
|
||||||
|
*/
|
||||||
|
thousandsSeparator: ",",
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* APIFunction: OpenLayers.Number.limitSigDigs
|
* APIFunction: OpenLayers.Number.limitSigDigs
|
||||||
* Limit the number of significant digits on a float.
|
* Limit the number of significant digits on a float.
|
||||||
@@ -231,6 +244,60 @@ OpenLayers.Number = {
|
|||||||
fig = parseFloat(num.toPrecision(sig));
|
fig = parseFloat(num.toPrecision(sig));
|
||||||
}
|
}
|
||||||
return fig;
|
return fig;
|
||||||
|
},
|
||||||
|
|
||||||
|
/**
|
||||||
|
* APIFunction: OpenLayers.Number.format
|
||||||
|
* Formats a number for output.
|
||||||
|
*
|
||||||
|
* Parameters:
|
||||||
|
* num - {Float}
|
||||||
|
* dec - {Integer} Number of decimal places to round to.
|
||||||
|
* Defaults to 0. Set to null to leave decimal places unchanged.
|
||||||
|
* tsep - {String} Thousands separator.
|
||||||
|
* Default is ",".
|
||||||
|
* dsep - {String} Decimal separator.
|
||||||
|
* Default is ".".
|
||||||
|
*
|
||||||
|
* Returns:
|
||||||
|
* {String} A string representing the formatted number.
|
||||||
|
*/
|
||||||
|
format: function(num, dec, tsep, dsep) {
|
||||||
|
dec = (typeof dec != "undefined") ? dec : 0;
|
||||||
|
tsep = (typeof tsep != "undefined") ? tsep :
|
||||||
|
OpenLayers.Number.thousandsSeparator;
|
||||||
|
dsep = (typeof dsep != "undefined") ? dsep :
|
||||||
|
OpenLayers.Number.decimalSeparator;
|
||||||
|
|
||||||
|
if (dec != null) {
|
||||||
|
num = parseFloat(num.toFixed(dec));
|
||||||
|
}
|
||||||
|
|
||||||
|
var parts = num.toString().split(".");
|
||||||
|
if (parts.length == 1 && dec == null) {
|
||||||
|
// integer where we do not want to touch the decimals
|
||||||
|
dec = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
var integer = parts[0];
|
||||||
|
if (tsep) {
|
||||||
|
var thousands = /(-?[0-9]+)([0-9]{3})/;
|
||||||
|
while(thousands.test(integer)) {
|
||||||
|
integer = integer.replace(thousands, "$1" + tsep + "$2");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
var str;
|
||||||
|
if (dec == 0) {
|
||||||
|
str = integer;
|
||||||
|
} else {
|
||||||
|
var rem = parts.length > 1 ? parts[1] : "0";
|
||||||
|
if (dec != null) {
|
||||||
|
rem = rem + new Array(dec - rem.length + 1).join("0");
|
||||||
|
}
|
||||||
|
str = integer + dsep + rem;
|
||||||
|
}
|
||||||
|
return str;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -138,6 +138,24 @@
|
|||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function test_Number_format(t) {
|
||||||
|
t.plan(9);
|
||||||
|
var format = OpenLayers.Number.format;
|
||||||
|
t.eq(format(12345), "12,345", "formatting an integer number works");
|
||||||
|
t.eq(format(12345, 3), "12,345.000", "zero padding an integer works");
|
||||||
|
t.eq(format(12345, null, ","), "12,345", "adding thousands separator to an integer works");
|
||||||
|
t.eq(format(12345, 0, ","), "12,345", "adding thousands separator to an integer with defined 0 decimal places works");
|
||||||
|
|
||||||
|
var num = 12345.6789
|
||||||
|
t.eq(format(num, null, "", ","), "12345,6789", "only changing decimal separator and leaving everything else untouched works");
|
||||||
|
t.eq(format(num, 5), "12,345.67890", "filling up decimals with trailing zeroes works");
|
||||||
|
t.eq(format(num, 3, ".", ","), "12.345,679", "rounding and changing decimal/thousands separator in function call works");
|
||||||
|
t.eq(format(num, 0, ""), "12346", "empty thousands separator in function call works");
|
||||||
|
OpenLayers.Number.thousandsSeparator = ".";
|
||||||
|
OpenLayers.Number.decimalSeparator = ",";
|
||||||
|
t.eq(format(num, 3), "12.345,679", "changing thousands/decimal separator globally works");
|
||||||
|
}
|
||||||
|
|
||||||
function test_07_Function_bind(t) {
|
function test_07_Function_bind(t) {
|
||||||
t.plan(12);
|
t.plan(12);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user