Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // ------------MYSQL-STYLE FLOATING POINT CONVERTER-------
- // Jim Reilly
- // Use to convert a floating point value to the precision of another floating point value
- //
- // Usage: var ouput = jimRound(pattern[float], propval[float])
- // return: float
- //
- // Examples
- // ------------------------
- //
- // jimRound(1, 555.55) = 556
- // jimRound(11, 555.55) = 556
- // jimRound(111, 555.55) = 556
- // jimRound(10, 555.55) = 560
- // jimRound(10., 555.55) = 560
- // jimRound(10.1, 555.55) = 555.6
- // jimRound(10.11, 555.55) = 555.55
- // jimRound(10.11, 555.555) = 555.56
- // jimRound(1000.11, 555.55) = 555.55
- // jimRound(1000.11, 555.544) = 555.54
- // jimRound(1000.11, 555.551) = 555.55
- // jimRound(1000.1111, 555.55) = 555.5500
- // jimRound(1000.1111, 555.559999) = 555.5600
- // jimRound(1000, 555.55) = 1000
- // jimRound(10000, 555.55) = 0
- // jimRound(10001, 555.55) = 556
- var jimRound = function(pattern, propval)
- {
- var dSplit = pattern.toString().split(".");
- var wNum = dSplit[0];
- var w = dSplit[0].toString().split("");
- if (typeof dSplit[1] === 'undefined')
- {
- var d = new Array();
- }
- else
- {
- var d = dSplit[1].toString().split("");
- }
- var wRound = 0;
- var foundPrec_N = false;
- for (var i = w.length - 1; i > -1; i--)
- {
- if ((w[i] == '0') && (!foundPrec_N))
- {
- wRound++;
- }
- else
- {
- foundPrec_N = true;
- }
- }
- var wAll = w.length;
- if (d.length > 0)
- {
- var wSigs = wAll;
- }
- else
- {
- var wSigs = wAll - wRound;
- }
- var dPrec = d.length;
- if (d.length > 0)
- {
- var propvalArray = propval.toString().split(".");
- if (typeof propvalArray[1] === 'undefined')
- {
- var pPrec = "0";
- }
- else
- {
- var pPrec = propvalArray[1].length;
- var propDec = propvalArray[1];
- }
- var trailZeros = 0;
- var foundNonZero = false;
- var trailZeroString = '';
- var propDecArray = propDec.split("");
- for (var z = 0; z < propDecArray.length; z++)
- {
- if ((propDecArray[z] == '0') && (!foundNonZero))
- {
- trailZeros++;
- trailZeroString += '0';
- }
- else
- {
- foundNonZero = true;
- }
- }
- var roundDecLength = propDecArray.length - trailZeros;
- var trimmedDec = propDec.substr(trailZeros, roundDecLength);
- var numTemplateDecs = d.length;
- var decCorrect = Math.pow(10, propDecArray.length - numTemplateDecs)
- if (pPrec >= dPrec)
- {
- var reduce = Math.pow(10, (pPrec - dPrec));
- var reducedValue = parseFloat(propDec) / reduce;
- var roundDec = Math.round(reducedValue);
- var roundDecString = '.' + roundDec;
- }
- else
- {
- var extraZeros = dPrec - pPrec;
- var extraZeroString = '';
- for (var e = 0; e < extraZeros; e++)
- {
- extraZeroString += '0';
- }
- var roundDecString = '.' + propDec + extraZeroString.toString();
- }
- if (trailZeroString == '')
- {
- var output = propvalArray[0] + roundDecString;
- }
- else
- {
- if (d.length > 1)
- {
- var output = propvalArray[0] + '.' + trailZeroString.toString() + roundDec;
- }
- else
- {
- var output = propvalArray[0] + '.' + roundDec;
- }
- }
- }
- else
- {
- var DigitRound = wAll - wSigs;
- var totalDivide = Math.pow(10, DigitRound);
- var output = Math.round(propval / totalDivide) * Math.pow(10, (wAll - wSigs));
- }
- return (output);
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement