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

标签 javascript arrays splice exponent

我正在尝试编写一个函数,当使用数组和 split() 方法将数字乘以 10 的负幂时,该函数会输出正确的结果。例如,以下表达式可以获得正确的结果: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('');
}

此处演示:https://jsfiddle.net/Hal_9100/c7nobmnj/

我尝试了不同的方法来获得不同的 num 长度和 exponent 值的正确结果,但我带来的一切都不起作用,我已经到了可以的地步。别想别的了。

你可以在这里看到我最新的尝试:https://jsfiddle.net/Hal_9100/vq1hrru5/

知道如何解决这个问题吗?

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

最佳答案

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

function computeExponentExpression ( test ) {
  var base;
  var multiplier;
  var exponent;
  
  test.replace(/^(\d+)(x)(\d+)([^])([-]?\d+)$/, function() {
	base = parseInt(arguments[1], 10);
    multiplier = parseInt(arguments[3], 10);
    exponent = parseInt(arguments[5], 10);
    return '';
  } );
  
  console.log( base * Math.pow(multiplier, exponent));
}

computeExponentExpression('1x10^-4');
computeExponentExpression('1x10^2');
computeExponentExpression('4x5^3');

关于javascript - 使用数组进行负指数的基本计算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40857917/

相关文章:

javascript - NodeJS buffer.slice() 不是一个函数?

javascript - 将 DIV 导出为 PDF

javascript - 如何为不同部分触发不同模态

arrays - 使用管道运行 bash 数组

java - 在数组中查找重复项

udp - Linux splice() 返回 EINVAL ("Invalid argument")

c++ - (某种)在 C++ 中旋转和切片容器的元素

javascript - Angular 5 karma 单元测试 : Failed: Cannot read property childcomponent property ( itgroup) of undefined

javascript - React JS 递归树

java - 并行对两个数组的每个元素求和