Почему 6,00 + (плюс) 5,00 = "5,006,00"? - PullRequest
1 голос
/ 16 марта 2012

Если у меня есть переменная, которой присваивается «числовое» значение из php echo ...

var names_each = <?php echo $ind_name_each; ?>;

... и $ind_name_each выводится из столбца mysql типа decimal(5,2), это число или строка в javascript?

, если all_total = 6.00 и names_each = 5.00, и я делаю это:

all_total = parseInt(names_each) + all_total;

Я получаю 56.00

all_total = names_each + all_total;

Я получаю 5.006.00

all_total = parseFloat(names_each) + all_total;

Я получаю 56.00

Мне нужно немного понимания здесь.

Ответы [ 6 ]

5 голосов
/ 16 марта 2012

конвертировать all_total из строки в int / float тоже ...

потому что теперь + во всех трех примерах является конкатенацией строк

4 голосов
/ 16 марта 2012

В JavaScript, если сторона оператора + является строковым значением, тогда обе стороны преобразуются в строку, а результатом оператора является конкатенация строк эти ценности. Вот несколько примеров:

 1  +  2   // 3
"1" + "2"  // "12"
"1" +  2   // "12"
 1  + "2"  // "12"

Обратите внимание, что в последних 3 случаях результат совпадает .

Удачного кодирования.

4 голосов
/ 16 марта 2012

Обе переменные являются строками:

var names_each = '5.0', all_total = '6.0';

поэтому операция + объединяет эти строки:

console.log(names_each + all_total);  // '5.0' + '6.0' => '5.06.0'
console.log(parseInt(names_each) + all_total); // 5 + '6.0' => '5' + '6.0' => '56.0'

но если вы сначала разберете их по номерам, то вы можете использовать +, чтобы добавить их:

all_total = parseInt(names_each) + parseInt(all_total);
console.log(all_total);  // 5 + 6 => 11
2 голосов
/ 16 марта 2012

В ваших примерах неясно, откуда берется all_total, но это должна быть строка, поскольку вместо сложения вы получаете конкатенацию строк.

Чтобы ответить на ваш первый вопрос, names_each это не строка, это число .

Вывод этого PHP-файла

var names_each = <?php echo $ind_name_each; ?>;

Должен быть примерно таким:

var names_each = 5;

или

var names_each = 5.1;

Так что это не такстрока, но фактическое число в js.Если другая сторона вашей попытки добавления - строка, вы получите конкатенацию строк.

1 голос
/ 16 марта 2012

следующие скажут вам, что они:

console.log(typeof names_each);
console.log(typeof all_total);

Вот несколько примеров:

typeof "6.00" //result is "string"
typeof 6.00 //result is "number"

Если вы добавите некоторые записи в свое приложение, вы сможете увидеть, где оно превращается в строку.

Кроме того, вы должны знать, что происходит следующее:

5.00 == "5.00" //result is "true"
5.00 === "5.00" //result is "false"

Использование тройного равенства не позволяет JS Engine неявно приводить тип вашей переменной. Таким образом, с === вы получите строгое сравнение без автоматического приведения типов.

Надеюсь, это поможет.

1 голос
/ 16 марта 2012

Ваши переменные - это строки, а не числа.
Поэтому, если вы явно не преобразуете их в числа, вы получите конкатенацию строк.

...