function NumRound(a_Num, a_Bit) {
//alert(a_Num + "\n" + Math.pow(10, a_Bit) + "\n" + a_Num * Math.pow(10, a_Bit))
return ((Math.round(a_Num * Math.pow(10, a_Bit)) / Math.pow(10, a_Bit)).toFixed(a_Bit));
}我发现用NumRound(99999999999999999,2)
测试的时候就不对。
大家可以把函数内的alert不注释,让他弹习试试。或者说是不是js只能在一定范围内进行这个转换。?
//alert(a_Num + "\n" + Math.pow(10, a_Bit) + "\n" + a_Num * Math.pow(10, a_Bit))
return ((Math.round(a_Num * Math.pow(10, a_Bit)) / Math.pow(10, a_Bit)).toFixed(a_Bit));
}我发现用NumRound(99999999999999999,2)
测试的时候就不对。
大家可以把函数内的alert不注释,让他弹习试试。或者说是不是js只能在一定范围内进行这个转换。?
高精度计算还是在 Server 端执行吧!
<!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>
<title> new document </title>
<meta name="generator" content="editplus" />
<meta name="author" content="" />
<meta name="keywords" content="" />
<meta name="description" content="" />
</head> <body><script language="javascript" type="text/javascript">
var numStr = "";
var charNine = "9";
var maxLength = 20;
for (var i=1; i<=maxLength; i++)
{
numStr += charNine;
document.write(i, ": Str: ", numStr, " Num: ",parseInt(numStr), "<br />");
}/*
1: Str: 9 Num: 9
2: Str: 99 Num: 99
3: Str: 999 Num: 999
4: Str: 9999 Num: 9999
5: Str: 99999 Num: 99999
6: Str: 999999 Num: 999999
7: Str: 9999999 Num: 9999999
8: Str: 99999999 Num: 99999999
9: Str: 999999999 Num: 999999999
10: Str: 9999999999 Num: 9999999999
11: Str: 99999999999 Num: 99999999999
12: Str: 999999999999 Num: 999999999999
13: Str: 9999999999999 Num: 9999999999999
14: Str: 99999999999999 Num: 99999999999999
15: Str: 999999999999999 Num: 999999999999999
16: Str: 9999999999999999 Num: 10000000000000000
17: Str: 99999999999999999 Num: 100000000000000000
18: Str: 999999999999999999 Num: 1000000000000000000
19: Str: 9999999999999999999 Num: 10000000000000000000
20: Str: 99999999999999999999 Num: 100000000000000000000
*/
</script> </body>
</html>
<!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>
<title> new document </title>
<meta name="generator" content="editplus" />
<meta name="author" content="" />
<meta name="keywords" content="" />
<meta name="description" content="" />
</head> <body><script language="javascript" type="text/javascript">
function NumRound(a_Num, a_Bit) {
//alert(a_Num + "\n" + Math.pow(10, a_Bit) + "\n" + a_Num * Math.pow(10, a_Bit))
return ((Math.round(a_Num * Math.pow(10, a_Bit)) / Math.pow(10, a_Bit)).toFixed(a_Bit));
}//var numStr = "";
var numStr = "0.";
var charNine = "9";
var maxLength = 20;
for (var i=1; i<=maxLength; i++)
{
numStr += charNine;
//document.write(i, ": Str: ", numStr, " Num: ",parseInt(numStr), "<br />");
document.write(i, ": Str: ", numStr, " Num: ",parseFloat(numStr), "<br />");
}/*
Int
1: Str: 9 Num: 9
2: Str: 99 Num: 99
3: Str: 999 Num: 999
4: Str: 9999 Num: 9999
5: Str: 99999 Num: 99999
6: Str: 999999 Num: 999999
7: Str: 9999999 Num: 9999999
8: Str: 99999999 Num: 99999999
9: Str: 999999999 Num: 999999999
10: Str: 9999999999 Num: 9999999999
11: Str: 99999999999 Num: 99999999999
12: Str: 999999999999 Num: 999999999999
13: Str: 9999999999999 Num: 9999999999999
14: Str: 99999999999999 Num: 99999999999999
15: Str: 999999999999999 Num: 999999999999999
16: Str: 9999999999999999 Num: 10000000000000000
17: Str: 99999999999999999 Num: 100000000000000000
18: Str: 999999999999999999 Num: 1000000000000000000
19: Str: 9999999999999999999 Num: 10000000000000000000
20: Str: 99999999999999999999 Num: 100000000000000000000Float
1: Str: 0.9 Num: 0.9
2: Str: 0.99 Num: 0.99
3: Str: 0.999 Num: 0.999
4: Str: 0.9999 Num: 0.9999
5: Str: 0.99999 Num: 0.99999
6: Str: 0.999999 Num: 0.999999
7: Str: 0.9999999 Num: 0.9999999
8: Str: 0.99999999 Num: 0.99999999
9: Str: 0.999999999 Num: 0.999999999
10: Str: 0.9999999999 Num: 0.9999999999
11: Str: 0.99999999999 Num: 0.99999999999
12: Str: 0.999999999999 Num: 0.999999999999
13: Str: 0.9999999999999 Num: 0.9999999999999
14: Str: 0.99999999999999 Num: 0.99999999999999
15: Str: 0.999999999999999 Num: 0.999999999999999
16: Str: 0.9999999999999999 Num: 0.9999999999999999
17: Str: 0.99999999999999999 Num: 1
18: Str: 0.999999999999999999 Num: 1
19: Str: 0.9999999999999999999 Num: 1
20: Str: 0.99999999999999999999 Num: 1
*/
</script> </body>
</html>
纯小数,即整数部分为0,最多显示 16 个 9;
普通小数,整数、小数部分都有且非零,
精度为(16, F),16 为整数部分与小数部分位数之和,F 为小数部分位数!这只是显示,并不保证此精度内的计算就是准确的,
因为运算中会有无限循环小数,也会发生精度丢失的问题!