2013-09-26 55 views
0

當兩個數字相乘並將結果寫入第三個輸入時,我有3個輸入。但是,當完全沒有必要時,我需要消除小數。消除乘法結果中不必要的小數點

<input type="text" name="input1" id="input1" value="" size="4" class="inputt" /> 
<br> 
<input type="text" name="input2" id="input2" value="" size="4" class="inputt" /> 
<br> 
<input type="text" readonly="readonly" name="input3" id="input3" value="" size="4" class="inputt" /> 

例如; 150.00應表示爲150,但150.50應保持原樣。

而且,當乘法後寫入結果時,我必須單擊readonly輸入以使結果四捨五入。我需要結果編號的最終指示,而不需要任何點擊。要更好地理解,請將第一個12.5寫入第二個12.1123,然後查看結果。

$(document).ready(function() { 
     $("#input1, #input2").change(function() { 
$("#input3").val($("#input1").val() * $("#input2").val()); 

var num =$("#input3").val(); 
num = num.toFixed(2); 
     }); 
    }); 

$(function() { 
$('#input1').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(2); 
     } 
    }    
    return this; 
}); 
}); 

$(function() { 
$('#input2').keyup(function(){ 
    if($(this).val().indexOf('.')!=-1){   
     if($(this).val().split(".")[1].length > 5){     
      if(isNaN(parseFloat(this.value))) return; 
      this.value = parseFloat(this.value).toFixed(2); 
     } 
    }    
    return this; 
}); 
}); 

$('input#input3').blur(function(){ 
    var num = parseFloat($(this).val()); 
    var cleanNum = num.toFixed(2); 
    $(this).val(cleanNum); 

    }); 

這裏是代碼http://jsfiddle.net/mLfkd/2/

回答

0

爲什麼你需要再次點擊的原因是因爲你使用.blur,這恰好#input3失去焦點之後。它是多餘的,所以我已經結合.change#input1#input2那部分,以及所使用的modulus trick from here來檢查是否有小數位或不:

$(document).ready(function() { 
    $("#input1, #input2").change(function() { 
     var num = parseFloat($("#input1").val()) * parseFloat($("#input2").val()); 

     if (num % 1 != 0) { 
      num = num.toFixed(2); 
     } else { 
      num = parseInt(num); 
     } 

     $("#input3").val(num); 
    }); 
}); 

$(function() { 
    $('#input1').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(2); 
      } 
     } 
     return this; 
    }); 
}); 

$(function() { 
    $('#input2').keyup(function() { 
     if ($(this).val().indexOf('.') != -1) { 
      if ($(this).val().split(".")[1].length > 5) { 
       if (isNaN(parseFloat(this.value))) return; 
       this.value = parseFloat(this.value).toFixed(2); 
      } 
     } 
     return this; 
    }); 
}); 

工作小提琴:http://jsfiddle.net/FMpBz/1/

+0

很好..我遇到了一個情況,結果是150.00,當我寫266到第一個輸入和0.5639到第二個。這是因爲任何舍入問題? – ctsnr

+0

@ctsnr是的,toFixed是四捨五入的([有時候...](http://stackoverflow.com/questions/10015027/javascript-tofixed-not-rounding))如果你只是想切斷它試試[這個解決方案] (http://stackoverflow.com/a/4187164/2817961):'Math.floor(num * 100)/ 100' –

+0

聽起來合乎邏輯,但我無法得到它與輸入266 * 0.5639的工作,雖然我試圖找到這個代碼到可能的位置。請問可以更新小提琴嗎? – ctsnr

0
var f1 = parseFloat(150.00).toFixed(2); 
var f2 = parseFloat(150.50).toFixed(2); 

function cut_it(a){ 
    var int_val = parseInt(a); 
    var res = a/int_val ; 
    if (res > 1) return a; 
    return int_val; 
} 
// got the point? 
alert (f1 + " -> " + cut_it (f1) + ", but "+ f2 + " -> " + cut_it (f2));