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。看看解决舍入错误的方法。这能回答你的问题吗?不,因为我的问题不是特别关于浮点问题,但是很高兴知道。看看这个,这肯定解决了问题