最近工作中总要用到Javascript处理订单金额计算相关的情况,而Javascript并不擅长浮点数计算。在我工作的项目中,数据存储使用了PostgreSQL,后端代码使用Node.js。而Node.js读PostgreSQL的numeric数据类型,读出的是字符串类型,因此要对结果做一些处理,由于涉及金额相关计算,又需要对数值做一些取舍。在此,整理下Javascript的数值类型及相关计算的知识,本篇为:数值类型简介
ECMAScript中使用IEEE754格式来表示整数和浮点数类型。为支持不进制的数值类型,ECMA-262定义了不同的数值字面量。
整数类型
十进制整数的直接书写,即前面不带0或0x,格式如下:
var intNum = 45; //十进制整数
八进制数的表示,以0开头,其后是数字0〜7。字面值超出范围时,前导符零将被忽略,后面的数据将被当做十进制处理,格式如下:
var octalNum1 = 073; //八进制(十进制的59) var octalNum1 = 078; //无效的八进制,相当于十进制的78
八进在严格模式下是无效,会抛出错误,在使用时应该注意。
十六进制数表示,以0x开冰,其后是数据0~9及A~F,字母不区分大小写。
var hexNum1 = 0X73; //相当于十进制的115 var hexNum2 = 0x2C; //相当于十进制的78
浮点数类型
ECMAScript中,浮点数类型的类值中必须包含一个小数点,并且小数点后必须有一位数字。浮点数值需要的内存空间,是整数类型数值的两倍,ECMAScript会在适当的时候将浮点数转换为整数。浮点数支持科学计数法(e)表示。格式如下:
var floatNum1 = 1.1; var floatNum2 = 1.0; //将被解析为整数1 var floatNum3 = .2; //有效,不推荐使用 var floatNum4 = 1.1e3; //科学计数法相当于1100