2011-12-06 1 views
0

私はダブルタイプモードのradtextboxを持っています。そして、私は1とラウンドしてきたので、それはテキストボックス値を丸めるjavascript

20.6 => 20.5 
20.7 => 20.5 
20.9 => 21.0 

として結果を与えているが、私は必要なすべては、私はより多くのを制限することによってこの問題を解決しようとした

20.6 => 21.0 
20.5 => 20.5 
20.4 => 20.0 

20.29 => 20.0 
20.53 => 20.5 
20.59 => 21 

この(少数サンプル)のようなものです小数点以下1桁の値。コードが正しく動作していません。

コード:

<script type="text/javascript"> 
function GetIndex(sender, args) { 
    var textbox = $find('<%= CPDPointsTextBox.ClientID %>'); 
    var val = textbox.get_value(); 
    var dsds = val.toString();   
    if (dsds.indexOf(".") > -1) { 
     if (dsds.length - (dsds.indexOf(".") + 1) > 1) { 
      alert(dsds.length - (dsds.indexOf(".") + 1)); 
      args.set_cancel(true);    
     } 
     else 
      return true; 
    } 
    else { 
     if (parseInt(dsds) > 0) { 
      return true; 
     } 
     else 
      args.set_cancel(true); 
    } 
} 

<telerik:RadNumericTextBox ID="CPDPointsTextBox" Width="39px" runat="server" MaxLength="5" 
              MaxValue="999" MinValue="0"> 
              <NumberFormat DecimalDigits="1" KeepNotRoundedValue="false" /> 
              <ClientEvents OnValueChanged="CPDPointsTextBox_ValueChanged" OnKeyPress="GetIndex" /> 
             </telerik:RadNumericTextBox> 

答えて

0

してみてください。すべてのあなたの返信をありがとう。

コード:jQueryのそれの一部

function change(lnk, evt) { 
    var textbox = $find('<%= CPDTextBox.ClientID %>'); 
    var val = lnk.value.toString(); 
    if (val != '') { 
     if (val.indexOf(".") > -1) { 
      var values = new Array(); 
      values = val.split("."); 
      var rouDec = round(parseFloat('.' + values[1]), 1); 

      if (rouDec > .5) { 
       val = parseInt(values[0]) + 1; 
      } 
      else if (rouDec == .5) { 
       val = parseInt(values[0]) + .5; 
      } 
     } 
    } 

    textbox.set_value(val); 
} 

function round(n, dec) { 
    n = parseFloat(n); 
    if (!isNaN(n)) { 
     if (!dec) var dec = 0; 
     var factor = Math.pow(10, dec); 
     return Math.floor(n * factor + ((n * factor * 10) % 10 >= 5 ? 1 : 0))/factor; 
    } else { 
     return n; 
    } 
} 

です
0

私は、次のコードを使用しています。 (より大きくなる可能性があります)。

function convertFloatDecimal (num, nDecimal) 
{ 
    var s; 
    if (nDecimal == null) 
     nDecimal = 1; 
    if (nDecimal == 1) 
    { 
     if (num < 0) 
     { 
      num= Math.abs (num); 
      s = ((Math.round (parseFloat (num) * 10)/10) * -1); 
     } 
     else 
      s = (Math.round (parseFloat (num) * 10)/10); 
     s = s.toString(); 
     if (s.indexOf (".") == -1) 
     s+= ".0"; 

    } 
    else if (nDecimal == 2) 
    { 
     if (num < 0) 
     { 
      num= Math.abs (num); 
      s = ((Math.round (parseFloat (num) * 100)/100) * -1); 
     } 
     else 
      s = (Math.round (parseFloat (num) * 100)/100); 
     s = s.toString(); 
     if (s.indexOf (".") == -1) 
      s+= ".00"; 

     if (s.indexOf (".") == s.length-2) // Add leading 0 
      s+= "0"; 
    } 
    else if (nDecimal == 0) 
    { 
     if (num < 0) 
     { 
      num= Math.abs (num); 
      s = (Math.round (num) * -1); 
     } 
     else 
      s = (Math.round (num)); 
    } 
    else 
    { 
     s = parseInt (s); 
    } 
    return s; 
} 
1

あなたはこの

var num = parseFloat(document.getElementById('textbox').value); 
var new_num = Math.round(num).toFixed(2); 

のためのjQueryを使用することは、次のコードは、期待を満たし、ここでJsFiddle

+1

? – JJJ

関連する問題