Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/428.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用数组进行负指数的基本计算_Javascript_Arrays_Splice_Exponent - Fatal编程技术网

Javascript 使用数组进行负指数的基本计算

Javascript 使用数组进行负指数的基本计算,javascript,arrays,splice,exponent,Javascript,Arrays,Splice,Exponent,我正在尝试编写一个函数,当使用数组和split()方法将一个数字乘以十的负幂时,输出正确的结果。例如,以下表达式得到正确的结果:1x10^-2=0.011x10^-4=0.0001 当数字的长度大于指数值时,就会出现问题(请注意,我的代码将num视为字符串,将其拆分为数组,如下面的代码所示: //var num is treated as a string to be splited inside get_results() function //exponent is a number //T

我正在尝试编写一个函数,当使用数组和
split()
方法将一个数字乘以十的负幂时,输出正确的结果。例如,以下表达式得到正确的结果:
1x10^-2=0.01
1x10^-4=0.0001

当数字的长度大于指数值时,就会出现问题(请注意,我的代码将
num
视为字符串,将其拆分为数组,如下面的代码所示:

//var num is treated as a string to be splited inside get_results() function
//exponent is a number
//Try different values for exponent and different lengths for num to reproduce the problem
//for example var num = 1234 and var exponent = 2 will output 1.234 instead of 12.34

var num = '1'; 
var sign = '-';
var exponent = 2;
var op = 'x10^'+sign+exponent;

var re = get_result(num);

console.log(num+op +' = '+ re);


function get_result(thisNum) {
    if (sign == '-') {
    var arr = [];
    var splitNum = thisNum.split('');
    for (var i = 0; i <= exponent-splitNum.length; i++) {
      arr.push('0');
    }
    for (var j = 0; j < splitNum.length; j++) {
      arr.push(splitNum[j]);
    }
    if (exponent > 0) {
      arr.splice(1, 0, '.');
    }
    arr.join('');
  }
  return arr.join('');
}
//var num被视为要在get_results()函数中拆分的字符串
//指数是一个数字
//尝试使用不同的指数值和不同的num长度来重现问题
//例如,var num=1234和var index=2将输出1.234而不是12.34
var num='1';
变量符号='-';
var指数=2;
var op='x10^'+符号+指数;
var re=获取结果(num);
console.log(num+op+'='+re);
函数get_result(thisNum){
如果(符号=='-'){
var-arr=[];
var splitNum=thisNum.split(“”);
对于(变量i=0;i 0){
arr.拼接(1,0'.');
}
arr.join(“”);
}
返回arr.join(“”);
}
此处演示:

我用不同的
num
长度和
exponent
值尝试了不同的方法来获得正确的结果,但我所得到的结果都不管用,我已经到了想不出其他任何东西的地步

您可以在此处看到我的最新尝试:

你知道我怎样才能解决这个问题吗


PS:我知道javascript浮点转换导致的大多数舍入错误都是无害的,可以使用
toFixed(n)修复
或使用专门的第三方库,但我在这里的唯一目标是更好地编写纯javascript函数。

我不确定您是否希望继续使用数组方法来解决问题,但似乎可以使用已经存在的Math.pow()方法来解决这个问题

函数computeExponentExpression(测试){
var基;
var乘数;
var指数;
测试。替换(/^(\d+)(x)(\d+)([^])([-]?\d+)$/,函数(){
base=parseInt(参数[1],10);
乘数=parseInt(参数[3],10);
指数=parseInt(参数[5],10);
返回“”;
} );
log(base*Math.pow(乘数,指数));
}
computeExponentExpression('1x10^-4');
computeExponentExpression('1x10^2');

computeExponentExpression('4x5^3');
问题在于小数点在哪里

而不是

arr.splice(1,0,'.');

试试这个:

arr.splice(-index,0,'.');


请参阅fiddle:

谢谢。尽管由于Math.pow的舍入错误,我不想使用它,但您向我展示了一种非常有趣的解析表达式字符串的方法。谢谢!我不知道为什么我没有想到它。它现在工作得非常好!