javascript中的Number类型

(1) IEEE 754 标准

通常在 Javascript 中不进行 小数运算

如果需要计算, 可以放到后端

或者利用其它数学框架

 特殊的例子:

 
console.log(0.3/0.1);//2.9999999999999996
console.log(0.6/0.1);//5.999999999999999
console.log(1.2/0.1);//11.999999999999998
console.log(2.4/0.1);//23.999999999999996

(2)  函数:将其它类型数据转为 number类型

a、 Number() 

只能将全数字字符串转为数字类型

 转换的是整个值,而不是部分值

b、parseInt()

 
 

注:在项目中遇到类似的问题,通过网络解决问题。
parseInt("07") 返回多少 ?
parseInt("08") 又返回多少 ?

  正确答案:
  parseInt("07") 返回8
  parseInt("08") 返回0


用javascript的parseInt函数时,parseInt("08")或者parseInt("09")返回的居然是0,而parseInt("01")...parseInt("07")都是正确的。

为什么这样呢?
一开始很难理解,后来发现出现这个问题的原因是当在前面有"0"时,javascript的debugger会认为这是一个八进制数,而"08"和"09"不是一个合法的八进制数,所以导致了那个问题,但是parseFloat不会存在这个问题。

只要写成这样就行了parseInt("08",10),指明是十进制就会返回8

javascript参考中parseInt()函数是如此描述:

parseInt 方法
返回由字符串转换得到的整数。将字符串转换成整型。

parseInt(numString, [radix])

parseInt的参数radix

可选项。在 2 和 36 之间的表示 numString 所保存数字的进制的值。如果没有提供,则前缀为 '0x' 的字符串被当作十六进制,前缀为 '0' 的字符串被当作八进制。所有其它字符串都被当作是十进制的。

因此,如果使用parseInt("08",10)或者parseInt("09",10),
通知javascript解释器使用十进制来解析就可以得到你要的数字。

 示例:

 

parseInt("0", 10) 返回 0
parseInt("473", 10) 返回 473
parseInt("-0", 10) 返回 0
parseInt("-FF", 16) 返回 -255
parseInt("1100110", 2) 返回 102
parseInt("2147483647", 10) 返回 2147483647
parseInt("-2147483648", 10) 返回 -2147483648
parseInt("2147483648", 10) 抛出 NumberFormatException
parseInt("99", 8) 抛出 NumberFormatException
parseInt("Kona", 10) 抛出 NumberFormatException

 

c、parseFloat()

  如果不是纯字符串, 则转到不能进行转为为止

与parseInt()函数类似,parseFloat()也是从第一个字符(位置0)开始解析每个字符。而且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。也就是说,字符串中的第一个小数点是有效的,而第二个小数点是无效的,因此它后面的字符串将被忽略。举例来说,“22.34.5”将会被转换为22.34。

除了第一个小数点有效之外,parseFloat()与parseInt()的第二个区别在于它始终都会忽略前导零。parseFloat()可以识别前面讨论过的所有浮点数值格式,也包括十进制整数格式。但十六进制格式的字符串始终会被转换为0。由于parseFloat()只解析十进制值,因此它没有用第二个参数指定基数的用法。

注意:如果字符串包含的是一个可解析为整数的数(没有小数点,或者小数点后面都是零),parseFloat()会返回整数。以下是使用parseFloat()转换数值的几个典型示例:

var num1 = parseFloat("1234blue"); //1234
var num2 = parseFloat("0xA"); //0
var num3 = parseFloat("22.5"); //22.5
var num4 = parseFloat("22.34.5"); //22.34
var num5 = parseFloat("0908.5"); //908.5
var num6 = parseFloat("3.125e7"); //31250000

  

 

 

 

posted @ 2016-08-17 21:19  最美FE  阅读(244)  评论(0)    收藏  举报