JavaScript - 7.数字number + 数学Math

1 Number 的特点

★ 为64位浮点,与许多其他编程语言不同,
JavaScript不会定义不同类型的数字,如整数,短,长,浮点等。
JavaScript号码始终作为双精度浮点数存储,遵循国际IEEE 754标准。

★ 整数(无周期或指数符号的数字)精确到15位数 
var x = 999999999999999;   // x will be 999999999999999
var y = 9999999999999999;  // y will be 10000000000000000

★ 最小小数位数为17,但浮点运算并不总是100%准确:
var x = 0.2 + 0.1;         // x will be 0.30000000000000004
解决方法 :
var x = (0.2 * 10 + 0.1 * 10) / 10;       // x will be 0.3

1.1 数字的 + 计算

// 当其中一个值为字符串时,数字将会转化成字符串再进行字符串相加
★ eg :
var x = 10;
var y = 20;
var z = x + y;   // 30 number
★ eg :
var x = "10";
var y = "20";
var z = x + y;  // 1020 string
★ eg :
var x = 10;
var y = 20;
var z = "The result is: " + x + y; // The result is: 1020 string
★ eg :
var x = 10;
var y = 20;
var z = "30";
var result = x + y + z;  // 3030 string

1.2 数字的 - , * , / 计算

// 两个值都为数字串(如 "150"),则先转换成number再进行计算,如果一个值为非数字串("你"),
则转化不了结果为NaN,NaN与任何值计算都为NaN
★ -
var x = "100";
var y = "10";
var z = x - y;  // 90 number
★ *
var x = "100";
var y = 10;
var z = x * y;  // 1000 number
★ /
var x = 100;
var y = "10";
var z = x / y; // 10 number

1.3 NaN - 不是数字 Not-a-Number

// NaN是一个JavaScript保留字,表示一个数字不是合法的号码。
★ eg :
var x = 100 / "Apple";  // NaN (Not a Number)
★ eg :
var x = NaN;
var y = "5";
var z = x + y;   // "NaN5" string
★ eg :
typeof NaN;    // returns "number"
★ isNaN()
var x = 100 / "Apple";
isNaN(x);               // 返回true,因为x不是一个数字。

1.4 无穷 infinity

★ eg :
// 正无穷大(或-Infinity)是如果您计算最大可能数字之外的数字,JavaScript将返回值。
var myNumber = 2;
while (myNumber != Infinity) {          // Execute until Infinity
    myNumber = myNumber * myNumber;
}
// Infinity
★ eg :
// 除以0也产生无限大:
var x =  2 / 0;          // Infinity 正无穷
var y = -2 / 0;          // -Infinity 负无穷
★ eg :
// Infinity是一个数字:无穷大的typeof返回数字。
typeof Infinity;        // returns "number"

1.5 十六进制

★ eg :
// 如果数字常量前面加上0x,则JavaScript将数字常量解释为十六进制。
var x = 0xFF;           // 255

★ 默认情况下,JavaScript将显示数字作为十进制。
但是您可以使用toString()方法输出数字作为基数16(十六进制),基数8(八进制)或基数2(二进制)。
var a = 128;
a.toString(16);  // returns 80 十六进制
a.toString(8);   // returns 200 八进制
a.toString(2);   // returns 10000000 二进制

2 Number 的方法

★ toString() // 数字转换为字符串
var a = 123;
var b = a.toString();
console.log(b);// 123
console.log(typeof b); // string

★ toExponential()// 返回一个字符串,数字用指数符号舍入并写入
var x = 9.656;
x.toExponential(2);     // returns 9.66e+0
x.toExponential(4);     // returns 9.6560e+0

★ toFixed() // 返回一个字符串 指定小数位数,并四舍五入  (修改小数位数)
var x = 9.656;
x.toFixed(0);           // returns 10
x.toFixed(2);           // returns 9.66
x.toFixed(4);           // returns 9.6560
x.toFixed(6);           // returns 9.656000

★ toPrecision()// 返回一个字符串,数字用指定的长度写 (修改总位数)
var x = 9.656;
x.toPrecision();        // returns 9.656
x.toPrecision(2);       // returns 9.7
x.toPrecision(4);       // returns 9.656
x.toPrecision(6);       // returns 9.65600

★ valueOf()// 将Number对象转换为原始值 (typeof = number)
var x = 123;
x.valueOf();            // returns 123 from variable x
(123).valueOf();        // returns 123 from literal 123
(100 + 23).valueOf();   // returns 123 from expression 100 + 23

在JavaScript中,一个数字可以是一个原始值(typeof = number)或一个对象(typeof = object)。
valueOf()方法在JavaScript中用于将Number对象转换为原始值。
所有JavaScript数据类型都具有valueOf()和toString()方法。

3 String 转化为 Number

★ Number() // 可用于将JavaScript变量转换为数字
x = true;
Number(x);        // returns 1
x = false;     
Number(x);        // returns 0
x = new Date();
Number(x);        // returns 1404568027739, 在Date()中使用Number()方法返回自1.1.1970以来的毫秒数
x = "10"
Number(x);        // returns 10
x = "10 20"
Number(x);        // returns NaN  只能转换纯数字文本.

★ parseInt() // 解析一个字符串并返回一个整数, 允许空格, 只有第一个数字被返回
parseInt("10");         // returns 10
parseInt("10.33");      // returns 10
parseInt("10 20 30");   // returns 10
parseInt("10 years");   // returns 10
parseInt("years 10");   // returns NaN 如果数字无法转换,则返回NaN(不是数字)。

★ parseFloat()// 解析一个字符串并返回一个浮点型数值, 允许空格, 只有第一个数字被返回
parseFloat("10");        // returns 10
parseFloat("10.33");     // returns 10.33
parseFloat("10 20 30");  // returns 10
parseFloat("10 years");  // returns 10
parseFloat("years 10");  // returns NaN

4 Number 属性(常数)

★ MAX_VALUE // 返回Number的最大值
var x = Number.MAX_VALUE;
console.log(x); // 1.7976931348623157e+308

★ MIN_VALUE // 返回Number的最小值
var x = Number.MIN_VALUE;
console.log(x); // 5e-324

★ NEGATIVE_INFINITY // 返回-Infinity 负无穷大 (返回溢出)
★ POSITIVE_INFINITY // 返回Infinity 正无穷大 (返回溢出)
★ NaN   表示一个 "Not-a-Number" (非数字)
var x = "50p";
console.log(isNaN(x)); // true

5 Math 对象

5.1 Math 方法

★ Math.PI;      // returns 3.141592653589793

★ Math.round(x) // 返回x四舍五入之后的整数 (无小数位)
Math.round(4.7);    // returns 5
Math.round(4.4);    // returns 4

★ Math.pow(x,y)// 将x的值返回给y的幂
Math.pow(8, 2);      // returns 64

★ Math.sqrt(x) // 返回x的平方根
Math.sqrt(64);      // returns 8

★ Math.abs(x) // 返回x的绝对(正)值:
Math.abs(-4.7);     // returns 4.7

★ Math.ceil(x) // 返回x的值四舍五入向上到其最接近的整数
Math.ceil(4.4);     // returns 5

★ Math.floor(x) // 返回x的值四舍五入向下到其最接近的整数:
Math.floor(4.7);    // returns 4

★ Math.sin(x) // 返回角度x的正弦(-1和1之间的值)(以弧度表示)
如果要使用度数而不是弧度,则必须将度数转换为弧度:
角度弧度=角度(度)x PI / 180
Math.sin(90 * Math.PI / 180);     // returns 1 (the sine of 90 degrees)

★ Math.cos(x) // 返回角度x(以弧度表示)的余弦(-1和1之间的值)
如果要使用度数而不是弧度,则必须将度数转换为弧度:
角度弧度=角度(度)x PI / 180。
Math.cos(0 * Math.PI / 180);     // returns 1 (the cos of 0 degrees)

★ Math.min()和 Math.max()// 可用于查找参数列表中的最低或最高值
Math.min(0, 150, 30, 20, -8, -200);  // returns -200
Math.max(0, 150, 30, 20, -8, -200);  // returns 150

★ Math.random() // 返回0(含)和1(排除)之间的随机数
console.log(Math.round(Math.random()*10)); // 返回0~10之间的随机整数

5.2 Math 属性 (常数)

JavaScript提供了可以使用Math对象访问的8个数学常数:
Math.E        // 返回自然对数 2.718281828459045
Math.PI       //返回圆周率 3.141592653589793
Math.SQRT2    //返回2的平方根 1.4142135623730951
Math.SQRT1_2   //返回1 / 2的平方根 0.7071067811865476
Math.LN2       //返回2的自然对数 0.6931471805599453
Math.LN10     //返回10的自然对数 2.302585092994046
Math.LOG2E   //返回以2为底的对数E 1.4426950408889634
Math.LOG10E   //返回以10为底的对数E  0.4342944819032518

5.3 Math 构造函数

与其他全局对象不同,Math对象没有构造函数。方法和属性是静态的。
可以使用所有方法和属性(常量),而不必首先创建Math对象。

5.4 Math 方法汇总

abs(x)  返回x的绝对值
acos(x) 返回x的余弦,弧度
asin(x) 返回x的反正弦,弧度
atan(x) 返回x的反正切值之间-π/ 2和π/ 2弧度
atan2(y, x) 返回参数的反正切的商
ceil(x) 返回x的值四舍五入向上到其最接近的整数
floor(x)    返回x的值四舍五入向下到其最接近的整数
cos(x)  返回x的余弦(x为弧度)
exp(x)  返回前值 Ex
log(x)  返回的自然对数(底数)x
max(x, y, z, ..., n)    返回数的最高值
min(x, y, z, ..., n)    返回数字的最低值
pow(x, y)   将x的值返回给y的幂
sqrt(x) 返回x的平方根
random()    返回一个0到1之间的随机数
round(x)    返回x的值舍入到最接近的整数
sin(x)  返回x的正弦(x为弧度)
sqrt(x) 返回x的平方根
tan(x)  返回一个角的切线
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,716评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,558评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,431评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,127评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,511评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,692评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,915评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,664评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,412评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,616评论 2 245
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,105评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,424评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,098评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,096评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,869评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,748评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,641评论 2 271

推荐阅读更多精彩内容

  • 参考基础教程的整理,方便记忆 一、Object对象 (O大写) 所有其他对象都继承自这个对象。Object本身也是...
    Viaphlyn阅读 2,250评论 0 0
  • 语法基础 - 词法 字符集 Unicode字符集, 区分大小写 注释 // /* */ 直接量 数字 小数 字符串...
    KeKeMars阅读 832评论 1 11
  • 第一章 Javascript简介 Javascript实现 核心(ECMAScript) 文档对象模型(DOM) ...
    江上风平浪静阅读 592评论 0 0
  • b
    红昔昔阅读 137评论 0 0
  • AFG-阿富汗 AHO-荷属安的列斯 ALB-阿尔巴尼亚 ALG-阿尔及利亚 AND-安道尔 ANG-安哥拉 AN...
    那罗阅读 1,661评论 0 0