2012-06-01 3 views
2

У меня есть текстовый ввод, и пользователь напишет строку, например 10+20-10-2*2+4/2, и я хочу выполнить арифметическую операцию последовательно, что означает, что я хочу (10+20)-(10)-(2)*(2)+(4)/(2), и результат должен быть 20 в соответствии с приведенным выше примером.Последовательная арифметическая операция в javascript

Другими словами, я хочу выполнить арифметическую операцию слева, последовательно. Может ли кто-нибудь помочь мне в этом, или, может быть, какая-то идея тоже будет приятной. Благодарю.

Пожалуйста, спросите меня, если потребуется дополнительная информация.

$('#calculation').on('blur', function(e){ 
    e.preventDefault(); 
    var pattern=/^[-*/+0-9]+$/; 
    value=$(this).val(); 
    if(value.match(pattern)) 
    { 

     $(this).closest('tr').find('span.error').html(''); 
     //$('#total').val(eval(value)); 
     // No idea what to do 

    } 
    else 
    { 
     $(this).closest('tr').find('span.error').html('Invalid character'); 
    } 
}); 
+0

[Что вы пробовали?] (Http://whathaveyoutried.com) –

+0

Было бы лучше, чтобы после того, что вы уже пробовали, и что проблема была. В противном случае это звучит немного как вопрос «пожалуйста, дайте мне код» .... –

+0

Хорошо, дай мне немного времени. –

ответ

2

Try this:

var str = '10+20-10-2*2+4/2'; 
var numbers = str.replace(/ /g, '').split(/[-+*\/]/g); 
var operators = str.replace(/ /g, '').split(/\d*/g); 
operators.shift(); 

var result = +numbers[0]; 

for (var i = 0; i < operators.length - 1; i++) { 
    result = eval(result + operators[i] + numbers[i + 1]); 
} 

alert(result)​; 

DEMO

+0

Что делать, если вы начинаете с отрицательного числа? –

+0

@SamDufel, я должен бежать, но не стесняйтесь редактировать мой ответ, чтобы исправить это. – qwertymk

+0

Спасибо большое, он работает. –

0

Как насчет использования Eval для вычисления значения.

$('#calculation').on('blur', function(e){ 
    e.preventDefault(); 
    var pattern=/^[-*/+0-9]+$/; 
    value=$(this).val(); 
    if(value.match(pattern)) 
    { 

     $(this).closest('tr').find('span.error').html(''); 
     //$('#total').val(eval(value)); 
     alert(eval(value)); 
     $('span.result').html(eval(value)); 

    } 
    else 
    { 
     $(this).closest('tr').find('span.error').html('Invalid character'); 
    } 
});​ 

См демо http://jsfiddle.net/gineshkumar/gRc9r/

+0

Может быть, вы не правильно прочитали мой вопрос, eval не будет делать это последовательно слева. eval выведет '18', но я хочу, чтобы это было' 20'. –

Смежные вопросы