【js】Number的属性与方法
Number的属性与方法
Number(value)
//创建数字对象
let n = new Number(10) //{10}
//类型转换
Number("10") //10
Number("0x11")//17
Number("-Infinity") //-Infinity
Number("0A") //NaN
Number(10n) //10
1 Number上的属性
- Number.EPSILON
- Number.MIN_VALUE
- Number.MAX_VALUE
- Number.MIN_SAFE_INTEGER
- Number.MAX_SAFE_INTEGER
- Number.NEGATIVE_INFINITY
- Number.POSITIVE_INFINITY
1 与 大于1可表示的浮点数 之间的
差值
2-522 ** (-52) == Number.EPSILON //true
1.2 Number.MIN_VALUE Number.MAX_VALUE
MIN_VALUE
最接近0的正值
约为5-324MAX_VALUE
最大值 约为1.79308大于MAX_VALUE的值为
Infinity
1.3 Number.MIN_SAFE_INTEGER Number.MAX_SAFE_INTEGER
MIN_SAFE_INTEGER
为最小安全整数
-(253-1)MAX_SAFE_INTEGER
为最大安全整数
253-1Number.MIN_SAFE_INTEGER == -(2 ** (53) - 1) //true
Number.MAX_SAFE_INTEGER == 2 ** (53) - 1//true
1.4 Number.NEGATIVE_INFINITY Number.POSITIVE_INFINITY
NEGATIVE_INFINITY
: -InfinityPOSITIVE_INFINITY
: Infinity- 0乘两者都为 NaN
- 两者互相除为NaN
- 任何数除以两者都为0
仅判断无穷时建议使用isFinite2 Number上的方法
- Number.isFinite()
- Number.isInteger()
- Number.isSafeInteger()
- Number.isNaN()
- Number.parseInt()
- Number.parseFloat()
是否
有穷
//无穷
let n1 = -Infinity
Nnmber.isFinite(n1)//false
isFinite(n1)//false
//有穷
let n2 = 0
Nnmber.isFinite(n2)//true
isFinite(n2)//true
//字符串
let n3 = '0'
Nnmber.isFinite(n3)//false
isFinite(n3)//true
isFinite()有2.2 Number.isInterger(value) Number.isSafeInteger(value)类型转换
,推荐使用
但是不能在里面将bigInt转换成Number
是否为
整数
是否为安全整数
Number.isInteger(2**100)//true
Number.isInteger('0')//false
Number.isInteger(0.1)//false
Number.isSafeInteger(2**100)//false
2.3 Number.isNaN(value) isNaN(value)
判断是否
非数字
//普通字符串
Number.isNaN('a')//false
isNaN('a')//true
//NaN字符串
Number.isNaN('NaN')//false
isNaN('NaN')//true
//数值字符串
Number.isNaN('10')//false
isNaN('10')//false
Number.isNaN() 无类型转换,为NaN时返回true,不是Number类型均返回false2.4 Number.parseInt(string,radix) Number.parseFloat(string)
isNaN()有隐式类型转换
,不是Number类型也可,转换后为非数字或者NaN返回true,也不支持bigInt
期待接收一个
字符串
进行转化/**
*无进制参数
*/
//字符串
parseInt("011x")//11
parseInt("0x11")//17
//数字
parseInt(011) //9
parseInt(0b11)//3
parseInt(0x11)//17
/**
*有进制参数
*/
//字符串
parseInt("011x",8)//9
//数字
parseInt(011,8)//NaN 011->"9"->NaN
无进制参数时
-
参数一为字符串 :识别10进制或16进制(0x开头) 转换为 10进制
参数一为数字:识别2、8、16进制,转为10进制
再转为字符串
有进制参数时
2-36-
参数一为字符串:基于指定进制截取字符串,转为10进制
参数一为数字:先识别进制,转为10进制再转为字符串,作为字符串再进行上述操作
Number上的类型转换与全局上的作用一样,建议简写3 原型上的方法
这两个方法会先截取
前面合法的部分进行转换
parseFloat()将字符串转为小数或NaN
- Number.prototype.toFixed()
- Number.prototype.toPrecision()
- Number.prototype.toExponential()
- Number.prototype.toLocaleString()
- Number.prototype.toString()
- Number.prototype.valueOf()
定点
表示法格式化一个数值 返回字符串
digits 0-20 默认为0
- 可以解决小数转成二进制后加和不准确
//四舍五入 2.55.toFixed(1) //"2.5" 2.35.toFixed(1) //"2.4" //解决精度问题 0.1+0.2 //0.30000000000000004 parseFloat((0.1+0.2).toFixed(10)) //0.3
toFixed()在四舍五入时会因精度问题不准确,但也仅限于保留位的
下一位为5
时
加和的误差值往往是多一个很小的值或少一个很小的值,toFixed完全可以满足日常需求
保留
有效数字
(从第一个不为0的数开始) 返回字符串
precision 1-100
//四舍五入
2.35.toPrecision(2) //"2.4"
2.55.toPrecision(2) //"2.5"
//返回指数
225.55.toPrecision(2) //"226"
let a = 225.55.toPrecision(2) //"2.3e+2"
parseFloat(a) //230
parseInt(a)//2
toPrecison的四舍五入与toFixed的一致3.3 toExponential(fractionDigits)
上有效位数小于整数位数时返回指数
parseFloat可以转化指数形式的字符串
指数表示法,指定
小数点后的位数
返回字符串
fractionDigits 0-20
//四舍五入
2.35.toExponential(1) //"2.4e+0"
2.55.toExponential(1) //"2.5e+0"
//指数表示
225.55.toExponential(1)//"2.3e+2"
225.55.toExponential(2)//"2.26e+2"
0.0035.toExponential(2)//"3.50e-3"
四舍五入与toFixed一致3.4 toLocaleString(locales,options)
与toPrecision比较,toExponential始终返回整数只有1位
的指数
两者在表示指数时,都会将第一个不为0的数作为整数位
将数字转成特定语言环境下的
字符串
locales:
'en-IN'印度分隔
'zh-Hans-CN-u-nu-hanidec'中文十进制分隔
'ar-EG'阿拉伯数字
...
options:
style: decimal 纯数字格式(默认)
currency 货币格式 USD EUR CNY
percent 百分比格式
unit 单位格式(测试中)
minimumIntegerDigits 整数数字最小数目 1-21
minimumFractionDigits 小数位数的最小数目 0-20
maximumFractionDigits 小数位数的最大数目 0-20 纯数字默认为3
minimumSignificantDigits 有效数字的最小数目 1-21
maximumSignificantDigits 有效数字的最大数量 1-21
全部参数详见MDN
//解决小数精度问题
(0.1+0.2).toLocaleString() //"0.3"
//locales参数
let n = 1234.5678
n.toLocaleString('zh-u-nu-hanidec')//一,二三四.五六八
a.toLocaleString('ar-EG')//?????????
//options参数
n.toLocaleString('zh-u-nu-hanidec',{maximumFractionDigits:10})//一,二三四.五六七八
默认保留小数位为3 等价于toFixed(3)3.5 toString(radix)
四舍五入与toFixed一致
转换为指定基数的
字符串
2-36 默认为10//默认值
(11).toString() //'11'
0b11.toString() //'3'
0o11.toString() //'9'
011.toString() //'9'
0x11.toString() //'17'//指定进制
0.1.toString(2)
//'0.0001100110011001100110011001100110011001100110011001101'
0x10.toString(16) //'10'
先识别数字的进制再转换为指定基数的字符串valueOf()
可以看到0.1转换为二进制为无限循环小数
,可以解释为什么0.1 + 0.2 != 0.3
【【js】Number的属性与方法】将数字对象转化为原始值
let a = new Number("10")
let b = a.valueOf()
console.log(a,b) // {10} 10
推荐阅读
- 宽容谁
- 我要做大厨
- 增长黑客的海盗法则
- 画画吗()
- 2019-02-13——今天谈梦想()
- 远去的风筝
- 三十年后的广场舞大爷
- 叙述作文
- 20190302|20190302 复盘翻盘
- 学无止境,人生还很长