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); +