I am working on a JavaScript function that takes two values: precision of a decimal value & scale of a decimal value.
This function should calculate the maximum value that can be stored in a decimal of that size.
For example: a decimal with a precision of 5 and a scale of 3 would have a maximum value of 99.999.
What I have does the job, but it’s not elegant. Can anyone think of something more clever?
Also, please forgive the use of this weird version of Hungarian notation.
function maxDecimalValue(pintPrecision, pintScale) { /* the maximum integers for a decimal is equal to the precision - the scale. The maximum number of decimal places is equal to the scale. For example, a decimal(5,3) would have a max value of 99.999 */ // There's got to be a more elegant way to do this... var intMaxInts = (pintPrecision- pintScale); var intMaxDecs = pintScale; var intCount; var strMaxValue = ""; // build the max number. Start with the integers. if (intMaxInts == 0) strMaxValue = "0"; for (intCount = 1; intCount <= intMaxInts; intCount++) { strMaxValue += "9"; } // add the values in the decimal place if (intMaxDecs > 0) { strMaxValue += "."; for (intCount = 1; intCount <= intMaxDecs; intCount++) { strMaxValue += "9"; } } return parseFloat(strMaxValue); }
Advertisement
Answer
Haven’t tested it:
function maxDecimalValue(precision, scale) { return Math.pow(10,precision-scale) - Math.pow(10,-scale); }
precision must be positive
maxDecimalValue(5,3) = 10^(5-3) - 10^-3 = 100 - 1/1000 = 99.999 maxDecimalValue(1,0) = 10^1 - 10^0 = 10 - 1 = 9 maxDecimalValue(1,-1) = 10^(1+1) - 10^1 = 100 - 10 = 90 maxDecimalValue(2,-3) = 10^(2+3) - 10^3 = 100000 - 1000 = 99000