Javascript простая математическая ошибка - PullRequest
1 голос
/ 02 сентября 2011

Я не могу понять, что вызвало это, хотя математика никогда не была моей специальностью, поэтому любая помощь приветствуется.Мое простое уравнение состоит из двух частей:

Ответ 1) 226 - [значение], умноженное на .9

Ответ 2) 226 - [значение], умноженное на .55

Если вы используете 40 в качестве входного значения, мой калькулятор говорит:

Ответ 1) 226 - 40 = 186 * .9 = 167,4

Ответ 2) 226 - 40= 186 * .55 = 102,3

Но мой код говорит:

Ответ 1) 190

Ответ 2) 204

Мой код:

HTML:
<input id="HR"size="4" value="" /><span id="number"></span>
 Answer 1 <strong><span id="answer1"></span></strong><br>
 Answer 2 <strong><span id="answer2"></span></strong>
</p>

<a href="#" class='THR'>click to calculate</a>

Script:
 <script type="text/javascript">
     $('a.THR').click(function() {
     var value = parseInt( $( "#HR" ).val() );
     $( "#answer1" ).html( 226 - value * 0.9 );
     $( "#answer2" ).html( 226 - value * 0.55 );
     return false;
   });
 </script>

Ответы [ 6 ]

6 голосов
/ 02 сентября 2011

Вы забываете порядок операций. Умножение имеет более высокий приоритет, чем сложение / вычитание. Поставьте круглые скобки вокруг вашего 226-value

 $( "#answer1" ).html( (226 - value) * 0.9 );
 $( "#answer2" ).html( (226 - value) * 0.55 );

Перечитывая твой вопрос, я не уверен, каков именно твой желаемый результат. Если вы хотите сначала выполнить умножение, а затем вычитание, вам не нужны круглые скобки, хотя может быть полезно написать 226 - (value * 0.9), чтобы прояснить ситуацию. Что происходит в вашем калькуляторе, так это то, что вы набираете 226 - value, а затем умножаете результат на десятичное число. Таким образом, приведенный выше код, (226 - value) * 0.9, представляет ваш набор текста. Это может помочь описать то, что вы пытаетесь сделать с точки зрения конечного пользователя, чтобы решить, куда идут ваши скобки.

5 голосов
/ 02 сентября 2011

Скобки: они вам нужны.

 $( "#answer1" ).html( (226 - value) * 0.9 );
 $( "#answer2" ).html( (226 - value) * 0.55 );
3 голосов
/ 02 сентября 2011

Умножение имеет приоритет перед вычитанием.
Следовательно, выражения будут интерпретироваться как:

Ответ 1) 226 - ([значение] умножено на .9)
например:

226 - (40 *0.9) = 226 - 36 = 190

Ответ 2) 226 - ([значение] умножено на .55)
например:

226 - (40 * .55) = 226 - 22 = 204
1 голос
/ 02 сентября 2011

В математике умножение имеет приоритет над сложением и вычитанием.Используйте скобки, чтобы уточнить:

$( "#answer1" ).html( (226 - value) * 0.9 );
$( "#answer2" ).html( (226 - value) * 0.55 );
1 голос
/ 02 сентября 2011

Это просто проблема порядка операций (ничего общего с jquery). Умножение / деление выполняется перед сложением / вычитанием. Итак:

226 - 40*.9 = 226 - 36 = 190
1 голос
/ 02 сентября 2011

Ваш код выполняет стандартный порядок операций:

  • круглые скобки,
  • Вычисление,
  • Multiplcation / Деление
  • Сложение / Вычитание

... но это не так. Поставьте в скобки свое уравнение, чтобы изменить порядок на то, что вы хотите.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...