Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/.htaccess/6.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_Math - Fatal编程技术网

Javascript 将数字数组和数学符号数组转换为数学表达式?

Javascript 将数字数组和数学符号数组转换为数学表达式?,javascript,math,Javascript,Math,我想谈谈这个问题: let nums = [1, 2, 3]; let syms = ["+", "*"]; let result; 转换为数学表达式: result = 1 + 2 * 3; console.log(result); // 7 不使用eval(),因为它会返回一些奇怪的东西,比如“6.3+0.6”=6.8999999995到目前为止,大多数没有bug的答案 var nums=[1,0],syms=['/'] const rulesyms = ['/','*']; //do

我想谈谈这个问题:

let nums = [1, 2, 3];
let syms = ["+", "*"];
let result;
转换为数学表达式:

result = 1 + 2 * 3;
console.log(result); // 7

不使用eval(),因为它会返回一些奇怪的东西,比如“6.3+0.6”=6.8999999995

到目前为止,大多数没有bug的答案

var nums=[1,0],syms=['/']
const rulesyms = ['/','*'];  //do not change sequence of this one.
var res, count=0,power=0;

solve_nonsumoperator().then(()=>{
    summing().then(()=>{
        console.log(nums[nums.length-1])
    })
})

function getnums(j,operator){
    power=0
    if(Math.floor(nums[j])!=nums[j])
        power=nums[j].toString().split('.')[1].length
    else{         //if not a float then forcing float point
        nums[j]=nums[j].toFixed(1)
        power=1
    }
    if(Math.floor(nums[j+1])!=nums[j+1]){
        if(power<nums[j+1].toString().split('.')[1].length){
            power=nums[j+1].toString().split('.')[1].length
        }
    }
    else{
        nums[j+1]=nums[j+1].toFixed(1)
        if(power<1)
            power=1
    }
    //adding decimal 0s to match floating point 
    for(let i = nums[j].toString().split('.')[1].length;i<power;i++)
        nums[j]=nums[j].toString()+'0'
    for(let i = nums[j+1].toString().split('.')[1].length;i<power;i++)
        nums[j+1]=nums[j+1].toString()+'0'
    nums[j]=parseInt(nums[j].toString().split('.').join(''),10)
    nums[j+1]=parseInt(nums[j+1].toString().split('.').join(''),10)
    switch(operator){
        case '/':res=nums[j]/nums[j+1]
                 break;
        case '*':res=nums[j]*nums[j+1]/Math.pow(10,2*power)
                 break;
        default:if(operator==='+')
                    res=(nums[j]+nums[j+1])/Math.pow(10,power)
                else if(operator==='-')
                    res=(nums[j]-nums[j+1])/Math.pow(10,power)
                 break;
    }
}

function redundant(j){
    nums[j+1]=res //replacing the result into array position
    for(var k = j;k>0;k--){
    //loop to replace the used nums, syms to begin of array
        nums[k]=nums[k-1]
        syms[k]=syms[k-1]  
    }
    syms[count]='$' //has to be below for loop
    count++
}

function summing(){
    syms.forEach((g,j)=>{
        if(g==='+'||g==='-'){
            getnums(j,g)
            redundant(j)                  
        }    
    })
    return Promise.resolve()
}

function solve_nonsumoperator(){
    rulesyms.forEach(f=>{
        syms.forEach((g,j)=>{
            if(g===f){
                getnums(j,f)
                redundant(j)
            }    
        })
    })
    return Promise.resolve()
}
var nums=[1,0],syms=['/']
常量规则符号=['/','*']//不要改变这个的顺序。
var res,计数=0,功率=0;
求解非单调运算符()。然后(()=>{
求和(),然后(()=>{
console.log(nums[nums.length-1])
})
})
函数getnums(j,运算符){
功率=0
如果(数学楼层(nums[j])!=nums[j])
power=nums[j].toString().split('..')[1].长度
else{//如果不是浮点,则强制浮点
nums[j]=nums[j].toFixed(1)
功率=1
}
如果(数学楼层(nums[j+1])!=nums[j+1]){
如果(电源){
如果(g==f){
格特努姆斯(j,f)
冗余(j)
}    
})
})
返回承诺。解决()
}

6.3+0.6
将返回“奇怪”的东西,无论您是否使用eval<代码>结果=6.3+0.6;console.log(result)在这里获得与之完全相同的
6.899…
。对这种行为的解释可以在这里找到,但6.3+0.6=6.89999只是因为浮点不准确。如果将
6.3+0.6
放入chrome控制台,您将获得6.89999。这只是JS。看看解决舍入错误的方法。这能回答你的问题吗?不,因为我的问题不是特别关于浮点问题,但是很高兴知道。看看这个,这肯定解决了问题