Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: умножение и деление в js

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Serhio
Отправлено: 22 Сентября, 2014 - 15:43:08
Post Id



Частый гость


Покинул форум
Сообщений всего: 194
Дата рег-ции: Март 2012  


Помог: 1 раз(а)




Всем ещё раз привет!

Объясните такую вещь:
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. $a=5;
  3. $b=30;
  4. $VAL = $a+$a*$b/100
  5.  
  6.  


Почему $VAL дает 1.55 ? когда должно быть +6,5?
 
 Top
RickMan
Отправлено: 22 Сентября, 2014 - 15:49:23
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




http://jsfiddle[dot]net/21pxdned/
так и дает 6,5... проверьте.
(Добавление)
А зачем $ использовать здесь?
 
 Top
Serhio
Отправлено: 22 Сентября, 2014 - 15:55:27
Post Id



Частый гость


Покинул форум
Сообщений всего: 194
Дата рег-ции: Март 2012  


Помог: 1 раз(а)




RickMan пишет:
http://jsfiddle[dot]net/21pxdned/
так и дает 6,5... проверьте.
(Добавление)
А зачем $ использовать здесь?



Какая то ерунда а меня не так, вроде все значения верные, в чем может быть дело?

Код такой
CODE (javascript):
скопировать код в буфер обмена
  1.  
  2. <script>
  3.                                                                                         $( "#pricefromseller" ).keyup(function() {
  4.                                                                                                 $pricefromseller = $( "#pricefromseller" ).val();
  5.                                                                                                 $percentplus = $( "#percentplus" ).val();
  6.                                                                                                 $RES = $pricefromseller*$percentplus/100;
  7.                                                                                                
  8.                                                                                                 alert($pricefromseller);
  9.                                                                                                 alert($percentplus);
  10.                                                                                                 alert($RES);
  11.                                                                                                 alert($RES + $pricefromseller)
  12.                                                                                                  $( "#price" ).val( (($( "#pricefromseller" ).val()*$( "#percentplus" ).val()/100) + $( "#pricefromseller" ).val()));
  13.                                                                                                 });
  14.                                                                                         </script>
  15.  


где $pricefromseller это 5
$percentplus это 30
В обоих случаях выдает 1.55

(Отредактировано автором: 22 Сентября, 2014 - 15:57:32)

 
 Top
RickMan
Отправлено: 22 Сентября, 2014 - 16:02:55
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




PHP:
скопировать код в буфер обмена
  1. $RES = $pricefromseller*$percentplus/100;

Подставляем значения и получаем:
Цитата:
5*30/100

и это равно 1,5. В чем тут проблема?
(Добавление)
Цитата:
((5*30/100) + 5)
- Вот что выходит во втором случае... тут должно быть 6,5...
 
 Top
Serhio
Отправлено: 22 Сентября, 2014 - 16:09:26
Post Id



Частый гость


Покинул форум
Сообщений всего: 194
Дата рег-ции: Март 2012  


Помог: 1 раз(а)




RickMan пишет:
PHP:
скопировать код в буфер обмена
  1. $RES = $pricefromseller*$percentplus/100;

Подставляем значения и получаем:
Цитата:
5*30/100

и это равно 1,5. В чем тут проблема?
(Добавление)
Цитата:
((5*30/100) + 5)
- Вот что выходит во втором случае... тут должно быть 6,5...

(Отредактировано автором: 22 Сентября, 2014 - 16:16:06)

 
 Top
RickMan
Отправлено: 22 Сентября, 2014 - 16:11:56
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




Да я не бешусь) Просто подставляю числа и не понимаю где прикол) По подстановкам все должно быть гуд. Видать проблема в чем-то другом. Если есть возможность, скинь всю страницу (удали лишнее, и что не влияет на результат). Или же оформи все на jsfiddle.
 
 Top
IllusionMH
Отправлено: 22 Сентября, 2014 - 16:14:38
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Serhio, как мне тут подсказали: "складывает как строчки?"
number + string - конкатенация строка, а не сложеине чисел. т.к. в данном случае приведение к строке выполниться а не наоборот. так что для рассчетов из текстовых полей всегда parseFloat

(Отредактировано автором: 22 Сентября, 2014 - 16:16:19)

 
 Top
Serhio
Отправлено: 22 Сентября, 2014 - 16:16:39
Post Id



Частый гость


Покинул форум
Сообщений всего: 194
Дата рег-ции: Март 2012  


Помог: 1 раз(а)




IllusionMH пишет:
Serhio, как мне тут подсказали: "складывает как строчки?"
number + string - конкатенация строка, а не сложеине чисел



Работает:

CODE (javascript):
скопировать код в буфер обмена
  1.  
  2.  
  3. $( "#pricefromseller" ).keyup(function() {
  4.                                                                                                 $pricefromseller = parseFloat($( "#pricefromseller" ).val());
  5.                                                                                                 $percentplus = $( "#percentplus" ).val();
  6.                                                                                                 $RES = $pricefromseller*$percentplus/100;
  7.                                                                                                
  8.                                                                                                 alert($pricefromseller);
  9.                                                                                                 alert($percentplus);
  10.                                                                                                 alert($RES);
  11.                                                                                                
  12.                                                                                                  $( "#price" ).val( $RES + $pricefromseller);
  13.                                                                                                 });
  14.  


Странно что на сложении она не работает, а при умножении работает и не нужно применять parsefloat

Спасибо IllusionMH с меня лайк

(Отредактировано автором: 22 Сентября, 2014 - 16:25:39)

 
 Top
RickMan
Отправлено: 22 Сентября, 2014 - 16:21:54
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




Это потому что знак + служит для конкатинации строк тоже...И Если тип переменных не числовой, а строчный то он и сработает как для строк.
 
 Top
Serhio
Отправлено: 22 Сентября, 2014 - 16:24:04
Post Id



Частый гость


Покинул форум
Сообщений всего: 194
Дата рег-ции: Март 2012  


Помог: 1 раз(а)




RickMan пишет:
Это потому что знак + служит для конкатинации строк тоже...И Если тип переменных не числовой, а строчный то он и сработает как для строк.


А то есть если * , то как бы пофиг числовой или не числовой тип, все равно перемножит?

з.ы. ведь перемножил верно, да даже разделил

(Отредактировано автором: 22 Сентября, 2014 - 16:24:35)

 
 Top
RickMan
Отправлено: 22 Сентября, 2014 - 16:28:24
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




Ну потому что у * и / других функций нету... Там либо тебе ошибку выдать, либо привести типы. Так как язык не с строгой типизацией, то он делает приведение типов в этом случае.
 
 Top
IllusionMH
Отправлено: 22 Сентября, 2014 - 16:29:09
Post Id



Активный участник


Покинул форум
Сообщений всего: 4254
Дата рег-ции: Февр. 2011  
Откуда: .kh.ua


Помог: 242 раз(а)




Serhio, почитайте основы приведение типов для различных операторов.
(Добавление)
RickMan, не будет ошибки. Просто вернется NaN
 
 Top
RickMan
Отправлено: 22 Сентября, 2014 - 16:32:48
Post Id


Участник


Покинул форум
Сообщений всего: 1033
Дата рег-ции: Май 2012  


Помог: 30 раз(а)




IllusionMH пишет:
Serhio, почитайте основы приведение типов для различных операторов.
(Добавление)
RickMan, не будет ошибки. Просто вернется NaN

А я и не писал что ошибку выдаст. Я описал, что теоретически может быть два исхода (без учета специфики языка).
 
 Top
wisedarkness
Отправлено: 23 Сентября, 2014 - 14:59:17
Post Id


Новичок


Покинул форум
Сообщений всего: 15
Дата рег-ции: Февр. 2013  


Помог: 0 раз(а)




Выведи все типы перед операциями:
CODE (javascript):
скопировать код в буфер обмена
  1. alert(typeof unknow);


Что бы наверняка. И посмотри что напишет. От туда и пляши уже.
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Вопросы новичков »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB