给定一个double类型的浮点数base和int类型的整数exponent。求base的exponent次方。
解:
牛客网的答案,好多都是调用的Math.pow,但是我们都知道,JavaScript算浮点数是有误差的。
Math.pow(0.01,3)//0.0000010000000000000002
所以还是把小数点换成整数再计算吧。
function Power(base, exponent)
{
var result = base;
while(exponent>1){
result = FloatMul(result,base);
exponent--;
}
if(exponent<0){
while(exponent<1){
result = FloatDiv(result,base);
exponent++;
}
}
if(exponent === 0)return 1;
return result;
}
function FloatMul(arg1,arg2) {
var m=0,s1=arg1.toString(),s2=arg2.toString();
try{m+=s1.split(".")[1].length}catch(e){}
try{m+=s2.split(".")[1].length}catch(e){}
return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m);
}
function FloatDiv(arg1,arg2){
var t1=0,t2=0,r1,r2;
try{t1=arg1.toString().split(".")[1].length}catch(e){}
try{t2=arg2.toString().split(".")[1].length}catch(e){}
with(Math){
r1=Number(arg1.toString().replace(".",""));
r2=Number(arg2.toString().replace(".",""));
return (r1/r2)*pow(10,t2-t1);
}
}
浮点数的加减乘除代码来自
[庄大虾的博客](http://www.cnblogs.com/slowsoul/archive/2013/06/12/3132821.html)
非常感谢!
网友评论