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