为什么JavaScript中的10 *(7/10)= 7?

时间:2013-10-11 11:29:51

标签: javascript

表达式(7/10)中的<7>和10是整数,因此结果0.7也应该是整数,即0,整个表达式的结果也应该是0。但是,它给了我7的结果,为什么?是忽略括号还是自动转换为双倍?

7 个答案:

答案 0 :(得分:11)

JavaScript不区分整数和浮点数,我认为所有的东西都被认为是双精度,这就是为什么你得到结果。

查看MDN上Number属性的详细信息。

答案 1 :(得分:6)

JavaScript中没有int和double

在JavaScript中,int,flot和double都被规范化以协同工作。它们被视为1(它们被视为Number,这是 IEEE 754 浮动。感谢@Elias Van Ootegem)。平等,自由和博爱。因此;

10 * 0.7 = 7

JavaScript不像C

答案 2 :(得分:6)

JavaScript没有整数类型,double或float ......它只有1种类型的所有数字:helpfuly名为Number类型(try var foo = new Number(7);或{ {1}}
现在,我知道我说JS不知道花车,但这并不完全正确。所有var foo = Number('123string');类型的vars /值,基本上是64位浮点数,由IEEE 754标准定义(实际上,正如Jan Dvorak向我指出的那样,Number在大多数静态类型中语言),带有它带来的所有警告:

double

但这不是重点。关键是,在JS中你可以执行float + int arithmatic,而不需要内部强制转换或转换。这就是(.1 + .2);//0.30000000000000004 总是为7

的原因

答案 3 :(得分:5)

Javascript没有整数,即使它有,也没有什么说/需要返回一个整数(只是因为另一种语言可能会这样做并不意味着每种语言都必须这样)。该操作会生成float / Number,就像所有Javascript编号一样,是句号。

答案 4 :(得分:1)

JavaScript使用动态类型。这意味着像这样的变量:

var str = "hi";

以后可以成为:

str = 123; //now we have an 'int'
str += 0.35; //now str is 123.35, a 'float'

因此,JavaScript不会将浮点数转换为整数。

如果你想强迫“演员”,你必须这样做:

var integer = parseInt( 3.14*9.0291+23, 10 ); //the second parameter (10) is the 'base'

但请记住,Javascript不会处理类型,这是你的问题。

答案 5 :(得分:1)

试试这个

10*parseInt(7/10)

希望这会对你有所帮助

答案 6 :(得分:1)

如果您尝试遵守规则,那么

10 * (7/10) --> 10 * .7 --> 7

你无法改变它的结果。

  

所以结果0.7也应该是整数,即0

如果您需要,请尝试使用

Math.Floor();

这会将小数更改为最接近的int!或者尝试parse()