You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by jw...@apache.org on 2010/01/21 05:05:25 UTC
svn commit: r901521 - in
/myfaces/trinidad/branches/1.2.12.2-branch/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs:
CoreFormat.js NumberFormat.js
Author: jwaldman
Date: Thu Jan 21 04:05:15 2010
New Revision: 901521
URL: http://svn.apache.org/viewvc?rev=901521&view=rev
Log:
TRINIDAD-1678 TrNumberFormat.prototype.numberToString doesn't account for numbers represented via scientific notation
commit for Cale Scholl
Modified:
myfaces/trinidad/branches/1.2.12.2-branch/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/CoreFormat.js
myfaces/trinidad/branches/1.2.12.2-branch/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberFormat.js
Modified: myfaces/trinidad/branches/1.2.12.2-branch/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/CoreFormat.js
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/1.2.12.2-branch/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/CoreFormat.js?rev=901521&r1=901520&r2=901521&view=diff
==============================================================================
--- myfaces/trinidad/branches/1.2.12.2-branch/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/CoreFormat.js (original)
+++ myfaces/trinidad/branches/1.2.12.2-branch/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/CoreFormat.js Thu Jan 21 04:05:15 2010
@@ -957,15 +957,17 @@
var floater = false;
if (parsefloat != null)
{
- // Why parseInt(parseFloat(numberString))? Because the server NumberConverter behaves the same
- // way as parseFloat. Note the following:
+ // Why trim leading zeroes? parseFloat behaves the same way as the server NumberConverter,
+ // but parseInt interprets octal, and thus we need to trim leading zeroes.
+ // Note the following:
// parseInt interprets octal and hex:
// alert(parseInt("0xA")); // returns 10
// alert(parseInt("008")); // returns 0, as it stops parsing octal at the first invalid character, 8
// parseFloat interprets neither octal nor hex:
// alert(parseFloat("0xA")); // returns 0, as it stops parsing decimal at the first invalid character, x
// alert(parseFloat("008")); // returns 8
- result = parsefloat ? parseFloat(numberString) : parseInt(parseFloat(numberString));
+ numberString = TrNumberFormat.trimLeadingZeroes(numberString);
+ result = parsefloat ? parseFloat(numberString) : parseInt(numberString);
}
else
{
Modified: myfaces/trinidad/branches/1.2.12.2-branch/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberFormat.js
URL: http://svn.apache.org/viewvc/myfaces/trinidad/branches/1.2.12.2-branch/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberFormat.js?rev=901521&r1=901520&r2=901521&view=diff
==============================================================================
--- myfaces/trinidad/branches/1.2.12.2-branch/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberFormat.js (original)
+++ myfaces/trinidad/branches/1.2.12.2-branch/trinidad-impl/src/main/javascript/META-INF/adf/jsLibs/NumberFormat.js Thu Jan 21 04:05:15 2010
@@ -338,6 +338,10 @@
number = (number*-1);
var numberString = number + "";
+
+ // check for scientific notation
+ numberString = TrNumberFormat.scientificToExpanded(numberString);
+
var index = numberString.indexOf(".");
var numberStringLength = numberString.length;
var ints;
@@ -418,6 +422,70 @@
}
/**
+ * Static utility function.
+ * Converts a number string from scientific notation to standard expanded notation.
+ */
+TrNumberFormat.scientificToExpanded = function(numberString)
+{
+ // check for scientific notation
+ var expIndex = numberString.indexOf('e');
+ if (expIndex == -1)
+ return numberString;
+
+ var prefix = "";
+ if (numberString.charAt(0) == '-')
+ {
+ prefix = "-";
+ numberString = numberString.substring(1);
+ expIndex -= 1;
+ }
+
+ var isPosExp = numberString.charAt(expIndex + 1) == '+';
+ var exp = parseInt(numberString.substring(expIndex + 2));
+ var nFractionDigits = expIndex - 2;
+ var zeroes = "";
+
+ // The exponent should always be greater than the number of fraction digits.
+ if (isPosExp)
+ {
+ for (var i = 0; i < exp - nFractionDigits; ++i)
+ zeroes += "0";
+
+ return prefix + numberString.charAt(0) + numberString.substring(2, expIndex) + zeroes;
+ }
+
+ // ELSE: negative exponent
+ for (var i = 0; i < exp - 1; ++i)
+ zeroes += "0";
+
+ return prefix + "0." + zeroes + numberString.charAt(0) + numberString.substring(2, expIndex);
+}
+
+/**
+ * Static utility function.
+ * Trims extraneous leading zeroes.
+ */
+TrNumberFormat.trimLeadingZeroes = function(numberString)
+{
+ var strbuf = [];
+ var i, char;
+ for (i = 0; i < numberString.length; ++i)
+ {
+ char = numberString.charAt(i);
+
+ if ((char >= '1' && char <= '9') || char == '.')
+ break;
+
+ if (char == '0' && i+1 < numberString.length && numberString.charAt(i+1) != '.')
+ continue;
+
+ strbuf.push(char);
+ }
+
+ return strbuf.join('') + numberString.substring(i);
+}
+
+/**
* helper for rounding values
*/
TrNumberFormat.prototype.getRounded = function(val)