表达式(7/10)中的7和10都是整数,因此结果0.7也应该是整数,即0。整个表达式的结果也应该是0。但是,实际返回的却是7,为什么?是忽略了括号还是自动转换为double类型?
表达式(7/10)中的7和10都是整数,因此结果0.7也应该是整数,即0。整个表达式的结果也应该是0。但是,实际返回的却是7,为什么?是忽略了括号还是自动转换为double类型?
JavaScript不区分整数和浮点数,我认为一切都被视为双精度浮点数,这就是你得到结果的原因。
请查看MDN上Number属性的详细信息。
Number
对应于大多数其他强类型语言中所称的double
。 - John DvorakJavaScript中没有int和double
在JavaScript中,int、float和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中你可以执行浮点数+整数运算而无需进行内部强制转换或转换。这就是为什么10*(7/10)
总是等于7的原因。
Javascript没有整数,即使有,也没有规定/
必须返回一个整数(只因为其他语言可能这样做,并不意味着每种语言都必须如此)。该操作的结果是一个float
/Number
,就像所有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 不会处理类型,这是你的责任。
parseInt
时,始终指定基数。当涉及到类型处理时,JS 做得相当不错(9/10)。例如:var someVar = 1, aString = 'The result of the sum is: ' + (someVar + 123/3) + ' not ' + 1
。变量 aString
将保存:the result of the sum is 42 not 1。 - Elias Van OotegemparseInt
传递一个数字,该数字将以一种无法使 parseInt
猜错的方式被转换为字符串 ;-) - John DvorakparseInt
,而结果可能会与你预期的不同... - Elias Van Ootegem10*parseInt(7/10)
10 * (7/10) --> 10 * .7 --> 7
你不能改变结果的方式。
因此,结果0.7也应该是整数,即0
如果你想要这样做,请尝试使用
Math.Floor();
parse()
函数。
10/4
是2.5
- 把它变成3
是错误的,也很烦人,因为这意味着在求和时必须将所有数字写成可能的小数精度,即10.0/4.0
,而对于10/3
就行不通了 --- 这个结果是完全可以预料的。 - MDEV