表达式 (7/10) 中的 7 和 10 是整数,所以结果 0.7 也应该是整数,即 0,整个表达式的结果也应该是 0。但是,它给了我 7 的结果,为什么?它是忽略括号还是自动转换为双精度?
7 回答
JavaScript 不区分整数和浮点数,我认为所有的东西都被认为是双精度的,所以这就是你得到结果的原因。
查看MDN上Number属性的详细信息。
JavaScript 中没有 int 和 double
在 JavaScript 中,int、flot 和 double 都被标准化以协同工作。它们被视为 1(它们被视为Number
,这是一个IEEE 754浮点数。感谢@Elias Van Ootegem)。平等、自由和博爱。因此;
10*0.7 = 7
JavaScript 不像 C。
JavaScript 没有整数类型、双精度类型或浮点数……它对所有数字只有一种类型:有用的称为Number
类型(尝试var foo = new Number(7);
,或者var foo = Number('123string');
现在,我知道我说过 JS 不知道浮点数, 但这并不完全正确。所有Number
类型的变量/值本质上都是 64 位浮点数,由 IEEE 754 标准定义(确实,正如 Jan Dvorak 向我指出double
的那样,在大多数静态类型语言中),以及随之而来的所有警告:
(.1 + .2);//0.30000000000000004
但这不是重点。关键是,在 JS 中,您可以执行 float + int 算术,而无需进行内部强制转换或转换。这就是为什么10*(7/10)
永远是7
Javascript 没有整数,即使有,也没有什么说/
需要返回整数(只是因为另一种语言可能会这样做并不意味着每种语言都必须这样做)。操作结果是float
/ Number
,就像所有 Javascript 数字一样,句点。
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 不会处理类型,那是你的问题。
试试这个
10*parseInt(7/10)
希望对你有帮助
如果你试图遵守规则,那么
10 * (7/10) --> 10 * .7 --> 7
你无法改变它的结果。
所以结果 0.7 也应该是整数,即 0
如果你想要这个,然后尝试使用
Math.Floor();
这会将小数更改为最接近的整数!或者试试parse()