2014-04-18 26 views
2

我正在嘗試創建一個文本字段,以便如果有一個數字153.254,那就變爲153.25。如果該字段包含154.2,則在小數點之後添加一個額外的0以填充兩個點; 154.20。限制小數點後的數字,如果一個數字加上0

toFixed()很好,但我不希望數字四捨五入。還遇到其他解決方案,如果我輸入1.40,則如果我將光標移回1之後,除非清除該字段並重新開始,否則我無法輸入任何內容。

是否有一個簡單的jQuery方法來限制小數點後的兩個字符,然後如果小數點後面只有一個字符,則添加一個零來填充兩個字符限制? (該領域可能從數據庫中獲得價值,這就是爲什麼第二部分是必需的)

解決方案更新:對於那些有興趣的人,我把這些放在一起來實現我想要的(感謝下面的答案以及其他關於stackoverflow的問題)

  $('.number').each(function(){ 
         this.value = parseFloat(this.value).toFixed(3).slice(0, -1); 
        }); 
      $('.number').keyup(function(){ 
         if($(this).val().indexOf('.')!=-1){   
          if($(this).val().split(".")[1].length > 2){     
           if(isNaN(parseFloat(this.value))) return; 
           this.value = parseFloat(this.value).toFixed(3).slice(0, -1); 

          } 
         }    
         return this; //for chaining 
        }); 
+1

[你並不需要jQuery來實現這一(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Number/toFixed )。 –

+1

使用Math.round。另請參閱Math.ceil()和Math.floor() –

回答

6

你可以做myNumber.toFixed(3).slice(0, -1)

+0

OP不希望它圓整 – Johan

+0

啊好點...編輯。 – jshanley

+0

哇我喜歡這個編輯版本,比我寫的wacky_round功能簡單得多 – Noitidart

2

試試這個:

var num = 153.2 

function wacky_round(number, places) { 
    var h = number.toFixed(2); 

    var r = number.toFixed(4) * 100; 
    var r2 = Math.floor(r); 
    var r3 = r2/100; 
    var r4 = r3.toFixed(2); 

    var hDiff = number - h; 
    var r4Diff = number - r3; 
    var obj = {}; 
    obj[hDiff] = h; 
    obj[r4Diff] = r4; 
    if (r4Diff < 0) { 
     return h; 
    } 
    if (hDiff < 0) { 
     return r4; 
    } 
    var ret = Math.min(hDiff, r4Diff); 

    return obj[ret]; 
} 

alert(wacky_round(num, 2)) 
1

怎麼樣

function doStuff(num){ 
    var n = Math.floor(num * 100)/100, 
     s = n.toString(); 

    // if it's one decimal place, add a trailing zero: 
    return s.split('.')[1].length === 1 ? (s + '0') : n; 
} 

console.log(doStuff(1.1), doStuff(1.111)); // 1.10, 1.11 

http://jsfiddle.net/NYnS8/

相關問題