diff --git a/src/text/NumberFormat.js b/src/text/NumberFormat.js index 4a041945..863d2c08 100644 --- a/src/text/NumberFormat.js +++ b/src/text/NumberFormat.js @@ -20,7 +20,9 @@ pv.Format.number = function() { padf = "0", // default fraction pad padg = true, // whether group separator affects integer padding decimal = ".", // default decimal separator - group = ","; // default group separator + group = ",", // default group separator + np = "\u2212", // default negative prefix + ns = ""; // default negative suffix /** @private */ function format(x) { @@ -29,12 +31,12 @@ pv.Format.number = function() { var s = String(Math.abs(x)).split("."); /* Pad, truncate and group the integral part. */ - var i = s[0], n = (x < 0) ? "-" : ""; + var i = s[0]; if (i.length > maxi) i = i.substring(i.length - maxi); - if (padg && (i.length < mini)) i = n + new Array(mini - i.length + 1).join(padi) + i; + if (padg && (i.length < mini)) i = new Array(mini - i.length + 1).join(padi) + i; if (i.length > 3) i = i.replace(/\B(?=(?:\d{3})+(?!\d))/g, group); - if (!padg && (i.length < mins)) i = new Array(mins - i.length + 1).join(padi) + n + i; - s[0] = i; + if (!padg && (i.length < mins)) i = new Array(mins - i.length + 1).join(padi) + i; + s[0] = x < 0 ? np + i + ns : i; /* Pad the fractional part. */ var f = s[1] || ""; @@ -204,5 +206,22 @@ pv.Format.number = function() { return group; }; + /** + * Sets or gets the negative prefix and suffix. The default negative prefix is + * "−", and the default negative suffix is the empty string. + * + * @param {string} [x] the negative prefix. + * @param {string} [y] the negative suffix. + * @returns {pv.Format.number} this or the current negative format. + */ + format.negativeAffix = function(x, y) { + if (arguments.length) { + np = String(x || ""); + ns = String(y || ""); + return this; + } + return [np, ns]; + }; + return format; }; diff --git a/tests/mark/transition.html b/tests/mark/transition.html index 886cad92..ee28f74d 100644 --- a/tests/mark/transition.html +++ b/tests/mark/transition.html @@ -44,7 +44,7 @@ > -
+

+ + +


     
+var i, text = "";
+
+text += ">>> pv.Format.number()\n";
+text += "input\texpected\tactual\n";
+
+i = pv.Format.number()(1);
+text += "1\t1\t" + i + "\n";
+
+i = pv.Format.number()(0);
+text += "0\t0\t" + i + "\n";
+
+i = pv.Format.number()(-.5);
+text += "-.5\t0\t" + i + "\n";
+
+i = pv.Format.number()(-.6);
+text += "-.6\t-1\t" + i + "\n";
+
+i = pv.Format.number()(-1);
+text += "-1\t-1\t" + i + "\n";
+
+i = pv.Format.number().negativeAffix("(", ")").integerDigits(2)(-1);
+text += "-1\t(01)\t" + i + "\n";
+
+i = pv.Format.number().integerDigits(2)(-1);
+text += "-1\t-01\t" + i + "\n";
+
+i = pv.Format.number()(NaN);
+text += "NaN\tNaN\t" + i + "\n";
+
+i = pv.Format.number()(1234.56);
+text += "1234.56\t1,235\t" + i + "\n";
+
+i = pv.Format.number().fractionDigits(2)(12345678.90);
+text += "12345678.90\t12,345,678.90\t" + i + "\n";
+
+i = pv.Format.number().fractionDigits(0, Infinity)(12345678.90);
+text += "12345678.90\t12,345,678.9\t" + i + "\n";
+
+i = pv.Format.number().fractionDigits(0, Infinity)(123456789.01);
+text += "123456789.01\t123,456,789.01\t" + i + "\n";
+
+i = pv.Format.number().group(" ").decimal(",").fractionDigits(2)(12345678.90);
+text += "12345678.90\t12 345 678,90\t" + i + "\n";
+
+i = pv.Format.number().integerDigits(2).fractionDigits(2)(999.9949);
+text += "999.9949\t99.99\t" + i + "\n";
+
+i = pv.Format.number().integerDigits(5).integerPad("0").fractionDigits(2)(4999.9);
+text += "4999.9\t04,999.90\t" + i + "\n";
+
+i = pv.Format.number().integerDigits(5).integerPad(" ").fractionDigits(2)(4999.9);
+text += "4999.9\t 4,999.90\t" + i + "\n";
+
+i = pv.Format.number().integerDigits(2).parse(999.9949);
+text += "999.9949\t100\t" + i + "\n";
+
+i = pv.Format.number().parse(999.9949);
+text += "999.9949\t1000\t" + i + "\n";
+
+testify(text);
+