Вычисление максимального значения для десятичной дроби с использованием масштаба и точности - PullRequest
2 голосов
/ 06 января 2012

Я работаю над функцией JavaScript, которая принимает два значения: точность десятичного значения и масштаб десятичного значения.

Эта функция должна вычислять максимальное значение, которое может быть сохранено в десятичном виде этого размера.

Например: десятичное число с точностью 5 и шкалой 3 будет иметь максимальное значение 99,999.

То, что у меня есть, делает работу, но это не элегантно. Кто-нибудь может придумать что-нибудь более умное?

Также, пожалуйста, простите за использование этой странной версии венгерской нотации.

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

Ответы [ 3 ]

5 голосов
/ 06 января 2012

Не проверял:

function maxDecimalValue(precision, scale) {
    return Math.pow(10,precision-scale) - Math.pow(10,-scale);
}

точность должна быть положительной

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
1 голос
/ 06 января 2012

А как же

function maxDecimalValue(pintPrecision, pintScale)
{
    var result = "";
    for(var i = 0; i < pintPrecision; ++i)
    {
        if(i == (pintPrecision - pintScale)
        {
            result += ".";
        }
        result += "9";
    }
    return parseFloat(result);
}

Проверьте это здесь

0 голосов
/ 06 января 2012

Я бы сделал что-то вроде ((10 * pintPrecision) - 1) + "." + ((10 * pintScale) - 1)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...