<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
Number
是JavaScript
的基本資料結構,是對應數值的應用型別。要建立一個 Number 物件,就使用 Number 建構函式並傳入一個數值。在 JavaScript 中沒有其他語言這麼多的數位型別。根據 ECMAScript 標準,數位只有一種型別,它是“雙精度 64 位二進位制格式 IEEE 754 值”。這種型別用於儲存整數和分數,相當於 Java 和 C 中的 double 資料型別。這個獨特性也就導致了 0.1+0.2 為什麼不等於 0.3。本文介紹JavaScript使用 Number 的常見問題。
先來看下下面的程式碼:
console.log(0.1 + 0.2); // 0.30000000000000004
從上面執行結果可以看出 0.1+0.2 不等於 0.3。只有分母為 2 的冪的分數才能有限地表示為二進位制形式. 由於 0.1 (1 / 10) 和 0.2 (1 / 5) 的分母不是 2 的冪,因此這些數位不能以二進位制格式有限地表示。為了將它們儲存為 IEEE-754 浮點數,它們必須四捨五入到尾數的可用位數——半精度為 10 位,單精度為 23 位,雙精度為 52 位。根據可用的精度位數,0.1 和 0.2 的浮點近似值可能比相應的十進位制表示略小或略大,但永遠不會相等。因為這個事實,永遠不會有 0.1+0.2 == 0.3。
NaN 代表Not a Number
並且它不同於 Infinity
,儘管兩者通常在實數的浮點表示以及浮點運算中都作為特殊情況處理。NaN 是一個特殊的值,它是唯一一個不等於自身的值,來看看下面的程式碼理解一個這個值:
const num = 9 + NaN; console.log(num); // NaN console.log(NaN == NaN); // false console.log(NaN === NaN); // false console.log(Object.is(NaN, NaN)); // true console.log(isNaN(NaN)); // true console.log(isNaN("devpoint")); // true console.log(Number.isNaN(NaN)); // true console.log(Number.isNaN("devpoint")); // false console.log(Number.isNaN(+"devpoint")); // true
Infinity
是 JavaScript 中的一個特殊值,表示數學無窮大和溢位值,數位太大以至於“溢位”緩衝區並導致 Infinity。它是計算建立超出 JavaScript 中特殊最大值的數位的結果,該值約為1.79e+308 或 2¹⁰²⁴,即 JavaScript 中可以儲存為數位原始型別的最大值。
注意 :Infinity,-Infinity 和 NaN 是 JavaScript 中唯一的“無限”(非有限)數位。
在程式中處理數位是一個常見的需求,例如序號、費用、溫度等等。下面通過程式碼展示一些常用的與 Number 有關的方法。
安全數位是一個數位,其值保證可以正常顯示。例如,如果有一個變數值為 900719925474099194 ,那麼它是否安全?
下面來看 JavaScript 中安全數位的範圍是多少?如何驗證?
const test = 900719925474099194; console.log(Number.isSafeInteger(test)); // false console.log(Number.isSafeInteger(9007199254740991)); // true
在 JavaScript
中對於數位不區分整數、小數等型別,統稱為 Number 型別。從下面的程式碼結果可以想到判斷整數的方法:
console.log(Number.isInteger(9)); // true console.log(Number.isInteger(9 / 2)); // false console.log(Number.isInteger(9.6)); // false console.log(9 % 1 === 0); // true console.log(9.1 % 1 === 0); // false const checkInteger = (num) => (num | 0) === num; console.log(checkInteger(9)); // true console.log(checkInteger(9.1)); // false console.log(checkInteger("9.0")); // false console.log(checkInteger("")); // false
下面的程式碼片段將展示如何檢查一個值或變數是否包含一個數位(整數、浮點數等)。
function isNumber(n) { return !isNaN(parseFloat(n)) && isFinite(n); } console.log(isNumber(100)); // true console.log(isNumber(3.14)); // true console.log(isNumber("3.14")); // true console.log(isNumber("a3.14")); // false console.log(isNumber("JavaScript")); // false
在 JavaScript
中,對數值進行四捨五入操作有很多的方式,下面來一一總結一下。
向上取整:
向上取整使用 Math.ceil()
,返回大於或等於 x ,並且與之最接近的整數。
console.log(Math.ceil(9.005)); // 10 console.log(Math.ceil(9.999)); // 10
四捨五入:
Math.round()
是對一個浮點數進行四捨五入,並保留整數位。語法如下:
Math.round(x)
x :需要處理的數值
返回值,返回給定數位的四捨五入後的值。
console.log(Math.round(9.005)); // 9 console.log(Math.round(9.51)); // 10 console.log(Math.round(9.49)); // 9 console.log(Math.round(9.999)); // 10
固定精度:
.toFixed()
是 Number
原型上實現的一個方法,其作用是對一個浮點數進行四捨五入並保留固定小數位。語法如下:
numObj.toFixed(digits)
digits:小數點後數位的個數;介於 0 到 20 (包括)之間,實現環境可能支援更大範圍。如果忽略該引數,則預設為 0。
返回值,返回使用定點表示法表示給定數位的字串。
const pi = 3.14159265359; console.log(pi.toFixed(2)); // 3.14 console.log(pi.toFixed(3)); // 3.142
固定長度:
.toPrecison()
也是 Number 原型上實現的一個處理浮點數的方法,和 toFixed 不同的是,它是對一個浮點數進行四捨五入並保留固定長度的有效數位,包括整數部分。語法如下:
numObj.toPrecision(precision)
precision:可選,一個用來指定有效數個數的整數。
返回值,以定點表示法或指數表示法表示的一個數值物件的字串表示,四捨五入到 precision 引數指定的顯示數位位數。
const pi = 3.14159265359; console.log(pi.toPrecision(3)); // 3.14 console.log(pi.toPrecision(4)); // 3.142
向下取整:
Math.floor()
返回小於或等於一個給定數位的最大整數。
Math.floor(x)
x:一個數位。
返回值,一個表示小於或等於指定數位的最大整數的數位。
console.log(Math.floor(9.005)); // 9 console.log(Math.floor(9.51)); // 9 console.log(Math.floor(9.49)); // 9 console.log(Math.floor(9.999)); // 9
通過Math.random()
返回 0-1 之間的亂數的原理,結果乘以最大數並四捨五入即可獲得一個介於 0 和 max 之間的數位。
const randomNumber = (max) => Math.round(Math.random() * max); console.log(randomNumber(100));
進一步完善上面的方法以可以獲取指定最小和最大範圍的亂數。
const randomNumber = (min, max) => Math.round(Math.random() * (max - min) + min); console.log(randomNumber(51, 100));
數學函數 Math
是一個內建物件,它擁有一些數學常數屬性和數學函數方法,Math 不是一個函數物件,Math 用於 Number 型別,但它不支援 BigInt。
JavaScript
的 Number
物件是經過封裝的能讓你處理數位值的物件。介紹了JavaScript 中唯一的“無限”(非有限)數子:Infinity,-Infinity 和 NaN ,並提供了一些常用的數位處理方法。
到此這篇關於JavaScript資料結構Number的文章就介紹到這了,更多相關JavaScript-Number內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45