为什么6.00 +(加)5.00 =“5.006.00”?

时间:2012-03-16 19:08:56

标签: javascript numbers

如果我有一个来自php echo ...

的“数字”值的变量
var names_each = <?php echo $ind_name_each; ?>;

... $ind_name_each派生自decimal(5,2)类型的mysql列, 它是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 个答案:

答案 0 :(得分:5)

all_total从字符串转换为int / float ...

因为现在,所有3个示例中的+都是字符串连接

答案 1 :(得分:4)

两个变量都是字符串:

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 :(得分:4)

在JavaScript中,如果{{1>}运算符的 侧是字符串值,那么两个侧将转换为字符串,运算符的结果为这些值的字符串连接。以下是一些例子:

+

请注意,最后3个案例的相同结果。

快乐的编码。

答案 3 :(得分:2)

在你的例子中,不清楚all_total首先出现在哪里,但它必须是一个字符串,因为你得到字符串连接而不是添加。

要回答您的第一个问题, names_each不是字符串,而是数字

此PHP文件的输出

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

应该是这样的:

var names_each = 5;

var names_each = 5.1;

所以,它不是字符串,而是js中的实际数字。如果您尝试添加的另一侧是字符串,则会得到字符串连接。

答案 4 :(得分:1)

你的变量是字符串,而不是数字 因此,除非您明确地将它们转换为数字,否则会得到字符串连接。

答案 5 :(得分:1)

以下内容将告诉您它们是什么:

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引擎隐式转换var的类型。因此,使用===,您将得到严格的比较,没有自动类型转换。

我希望这会有所帮助。