2012-01-05 101 views
2

我正在研究一個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); 
} 

回答

4

沒有測試線的東西:

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 
+0

在dnc253的原始答案後,我最終提出了這個問題。感謝您的確認! – 2012-01-05 21:26:12

0

我會做沿着((10 * pintPrecision) - 1) + "." + ((10 * pintScale) - 1)

+0

不太,http://jsfiddle.net/pvFj3/ – 2012-01-05 21:22:47

+0

這是不行的,但它確實給我一個想法。 – 2012-01-05 21:25:44

1

什麼

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

檢查出來here