【问题标题】:Using arrays to do basic calculations with negative exponent使用数组进行负指数的基本计算
【发布时间】:2016-11-29 04:36:26
【问题描述】:

我正在尝试编写一个函数,当使用数组和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
//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函数。

【问题讨论】:

    标签: javascript arrays splice exponent


    【解决方案1】:

    我不确定您是否要继续使用数组方法来解决问题,但似乎可以使用已经存在的 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');

    【讨论】:

    • 谢谢。尽管由于舍入错误我不想使用 Math.pow,但您向我展示了一种非常有趣的方法来解析表达式字符串。
    【解决方案2】:

    问题是你推小数点.

    而不是

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

    试试这个:

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

    见小提琴:https://jsfiddle.net/free_soul/c7nobmnj/1/

    【讨论】:

    • 谢谢!我不知道为什么我没有想到。它现在工作得很好!
    猜你喜欢
    • 1970-01-01
    • 2023-04-07
    • 1970-01-01
    • 1970-01-01
    • 2012-09-22
    • 1970-01-01
    • 2022-11-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多