圆形文本框值javascript

时间:2011-12-06 05:40:54

标签: javascript rounding

我有一个双模式的radtextbox。我已经将其设置为1.因此它将结果作为

 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

我试图通过限制多个十进制值来解决这个问题。但是代码运行不正常。

代码:

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

3 个答案:

答案 0 :(得分:1)

您可以将Jquery用于此

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

在这里试试 JsFiddle

答案 1 :(得分: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;
}

答案 2 :(得分:0)

以下代码符合预期。感谢您的所有回复。

代码:

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