关于JS中的parseInt("099")函数解惑

对于parseInt("01")到parseInt("07");都能得到正确的结果,但如果是parseInt("08")或parseInt("09")则返回0;

首先看parseInt语法:parseInt(string, radix);

其中string为要转换的字符串,radix为二进制,八进制,十六进制或十进制。
在默认不指定radix时,当以0x开关时,为十六进制;如果以0开关且第二位不为x,则让为是八进制,(因为八进制不能有8,9所以报错返回0)。
所以,在我们用时还是明确指定进位制,以防出错。
如我们平时都用十进制位,我们就 parseInt("08", 10);

值得注意啊!今天解决问题时,无意间发现原来就是parseInt导致的BUG.

后来补上了第二个参数10,就好了。呵呵O(∩_∩)O~


特此黏贴我的代码如下:计算价格=单价*数量

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="IndexOf.aspx.cs" Inherits="WebApplication1.IndexOf" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title></title>
    
</head>
<body>
    <form id="form1" runat="server">
    <div>
    <input type="text" id="result" />
    <script type="text/javascript">
        document.getElementById("result").value = DecimalCounter_multi(0.99, 2);
        function DecimalCounter_multi(strMultiplicand, strMultiplier) {
            if (strMultiplicand == null) {
                strMultiplicand = new String("0");
            }
            if (strMultiplier == null) {
                strMultiplier = new String("0");
            }
            strMultiplicand = strMultiplicand.toString();
            strMultiplier = strMultiplier.toString();

            //strMultiplicand = Trim(strMultiplicand);
            //strMultiplier = Trim(strMultiplier);
            // check null
            if (strMultiplicand.length == 0) {
                strMultiplicand = new String("0");
            }
            if (strMultiplier.length == 0) {
                strMultiplier = new String("0");
            }

            var iMultiplicandPointIndex = strMultiplicand.indexOf(".");
            var iMultiplierPointIndex = strMultiplier.indexOf(".");
            var iMultiplicandDecimalLength = 0;
            var iMultiplierDecimalLength = 0;

            if (iMultiplicandPointIndex >= 0) {
                iMultiplicandDecimalLength = strMultiplicand.length - 1 - iMultiplicandPointIndex;
            }
            if (iMultiplierPointIndex >= 0) {
                iMultiplierDecimalLength = strMultiplier.length - 1 - iMultiplierPointIndex;
            }
            var iProductDecimalLength = iMultiplicandDecimalLength + iMultiplierDecimalLength;
            //alert(iProductDecimalLength);//2
            if (iProductDecimalLength == 0) {
                var tmpIntProduct = parseInt(strMultiplicand,10) * parseInt(strMultiplier,10);
                return tmpIntProduct.toString();
            }

            //
            var tmpMultiplicandInteger = strMultiplicand.substring(0, iMultiplicandPointIndex);
            //alert("tmpMultiplicandInteger: " + tmpMultiplicandInteger);//0
            var tmpMultiplicandDecimal = strMultiplicand.substring(iMultiplicandPointIndex + 1, strMultiplicand.length);
            //alert("tmpMultiplicandDecimal:" + tmpMultiplicandDecimal);//99
            var tmpMultiplierInteger = strMultiplier.substring(0, iMultiplierPointIndex);
            //alert("tmpMultiplierInteger:" + tmpMultiplierInteger);//
            var tmpMultiplierDecimal = strMultiplier.substring(iMultiplierPointIndex + 1, strMultiplier.length);
            //alert("tmpMultiplierDecimal:" + tmpMultiplierDecimal);//1
            var tmpMultiplicand = tmpMultiplicandInteger.concat(tmpMultiplicandDecimal);
            //alert("tmpMultiplicand:" + tmpMultiplicand);//099
            var tmpMultiplier = tmpMultiplierInteger.concat(tmpMultiplierDecimal);
            //alert("tmpMultiplier:" + tmpMultiplier);//1

            var tmpProduct = new String("");
            if ((tmpMultiplicand.length == 0) || (tmpMultiplier.length == 0)) {
                tmpProduct = new String("");
                return tmpProduct;
            }
            else {
                //alert(tmpMultiplicand);
                //alert("" + parseInt(tmpMultiplicand,10));
                var tmpIntProduct = parseInt(tmpMultiplicand,10) * parseInt(tmpMultiplier,10);
                tmpProduct = tmpIntProduct.toString();
            }
            //
            alert("tmpProduct:" + tmpProduct); //99
            //alert("iProductDecimalLength is :" + iProductDecimalLength);//2
            var tmpProductInteger = tmpProduct.substr(0, tmpProduct.length - iProductDecimalLength);
            //alert("tmpProductInteger is :" + tmpProductInteger);
            var tmpProductDecimal = tmpProduct.substr(tmpProduct.length - iProductDecimalLength, iProductDecimalLength);
            alert("tmpProductDecimal is :" + tmpProductDecimal);
            var strProductWithDecimal = tmpProductInteger.concat(".");
            strProductWithDecimal = strProductWithDecimal.concat(tmpProductDecimal);
            return strProductWithDecimal;
        }
    </script>
    </div>
    </form>
</body>
</html>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值