Nodejs學習筆記(十七)--- 浮點運算decimal.js
目錄
前言
開發過程中免不了有浮點運算,JavaScript浮點運算的精度問題會帶來一些困擾
JavaScript 只有一種數字型別 ( Number )
JavaScript採用 IEEE 754 標準雙精度浮點(64),64位中 1位浮點數中符號,11儲存指數,52位儲存浮點數的有效數字
有時候小數在二進位制中表示是無限的,所以從53位開始就會舍入(舍入規則是0舍1入),這樣就造成了“浮點精度問題”(由於舍入規則有時大點,有時小點)
下面用示例來看看
JavaScript加減乘除運算
加法
var a = 0.1; var b = 0.2; console.log(add.js 示例程式碼'0.1 以二進位制表示:', a.toString(2)); console.log('0.2 以二進位制表示:', b.toString(2)); console.log('直接加法運算 0.1 + 0.2 =', a + b);
示例: 0.1 + 0.2
預期結果:0.3
實際結果:0.30000000000000004
減法
var a = 1.0; var b = 0.7; console.log('1.0 以二進位制表示:', a.toString(2)); console.log('0.7 以二進位制表示:', b.toString(2)); console.log(sub.js示例程式碼'直接減法運算 1.0 - 0.7 =', a - b);
示例: 1.0 - 0.7
預期結果:0.3
實際結果:0.30000000000000004
乘法
var a = 1.01; var b = 1.003; console.log('1.01 以二進位制表示:', a.toString(2)); console.log('1.003 以二進位制表示:', b.toString(2)); console.log('直接乘法運算 1.01 * 1.003 =', a * b);mul.js示例程式碼
示例: 1.01 * 1.003
預期結果:1.01303
實際結果:1.0130299999999999
除法
var a = 0.029; var b = 10; console.log('0.029 以二進位制表示:', a.toString(2)); console.log('10 以二進位制表示:', b.toString(2)); console.log('直接除法運算 0.029 / 10 =', a / b);div.js示例程式碼
示例: 0.029 / 10
預期結果:0.0029
實際結果:0.0029000000000000002
說明:以上加、減、乘、除示例分別演示了JavaScript運算結果(當然實際結果並不是我們想要的),為什麼會出現這樣的結果,前言中已經說明^_^!
decimal.js加減乘除運算
An arbitrary-precision Decimal type for JavaScript
先安裝decimal.js
npm install --save decimal.js
把上面的示例,用decimal.js運算一次,對比一下結果
var Decimal = require('decimal.js'); //加法 var a = 0.1; var b = 0.2; console.log('直接加法運算 a + b =', a + b); console.log('Decimal.js加法運算 a + b =', new Decimal(a).add(new Decimal(b)).toNumber()); //減法 var a = 1.0; var b = 0.7 console.log('直接減法運算 a - b =', a - b); console.log('Decimal.js減法運算 a - b =', new Decimal(a).sub(new Decimal(b)).toNumber()); //乘法 var a = 1.01; var b = 1.003; console.log('直接乘法運算 a * b =', a * b); console.log('Decimal.js乘法運算 a * b =', new Decimal(a).mul(new Decimal(b)).toNumber()); //除法 var a = 0.029; var b = 10; console.log('直接除法運算 a / b =', a / b); console.log('Decimal.js除法運算 a / b =', new Decimal(a).div(new Decimal(b)).toNumber());app.js示例程式碼
從圖中可以看結果一目瞭然^_^!
說明: “浮點問題”不算是問題,它一直就是這樣,也不是JavaScript獨有的, 所以這個鍋不應該它背^_^!
相關推薦
Nodejs學習筆記(十七)—浮點運算decimal.js
學習筆記 存儲 log title ron 學習 decimal 安裝 bit 前言 開發過程中免不了有浮點運算,JavaScript浮點運算的精度問題會帶來一些困擾 JavaScript 只有一種數字類型 ( Number ) JavaScript采用
Nodejs學習筆記(十七)--- 浮點運算decimal.js
目錄 前言 開發過程中免不了有浮點運算,JavaScript浮點運算的精度問題會帶來一些困擾 JavaScript 只有一種數字型別 ( Number ) JavaScript採用 IEEE 754 標準雙精度浮點(64),64位中 1位浮點數中符號,11儲存指數,52位儲存浮點數的有效
iOS學習筆記(十七)——文件操作(NSFileManager)
技術分享 append hint pbo -cp fcm object 寫入 rtmp http://blog.csdn.net/xyz_lmn/article/details/8968213 iOS的沙盒機制,應用只能訪問自己應用目錄下的文件。ios不像Androi
Java學習筆記(十七):super關鍵字
mage cnblogs 分享 關鍵字 super關鍵字 log .cn nbsp java Java學習筆記(十七):super關鍵字
R語言學習筆記(十七):data.table包中melt與dcast函數的使用
eas table variable mil pat efault ast 函數 pre melt函數可以將寬數據轉化為長數據 dcast函數可以將長數據轉化為寬數據 > DT = fread("melt_default.csv") > DT
Linux學習筆記(十七) vim
vim一、vim介紹vim是vi的升級版是帶有顏色顯示的vi分為一般模式、編輯模式、命令模式。yum install -y vim-enhanced安裝vim安裝完成之後使用vim打開passwdvim /etc/passwd和之前用vi打開有明顯的區別,vim帶有顏色顯示,二、vim顏色顯示和移動光標將/e
Nodejs學習筆記(十四)—Mongoose介紹和入門
tar 字段名 lse number 數組 int 位置 斷開 mongod 簡介 Mongoose是在node.js異步環境下對mongodb進行便捷操作的對象模型工具 那麽要使用它,首先你得裝上node.js和mongodb,關於mongodb的安裝和操作介紹可
Nodejs學習筆記(十六)—Pomelo介紹&入門
錯誤信息 develop prototype client 之前 clas zhong 早已 express 前言&介紹 Pomelo:一個快速、可擴展、Node.js分布式遊戲服務器框架 從三四年前接觸Node.js開始就接觸到了Pomelo,從Pomel
Nodejs學習筆記(十一)—數據采集器示例(request和cheerio)
列表 意思 9.1 很多 AD 開發 com http undefined 寫在之前 很多人都有做數據采集的需求,用不同的語言,不同的方式都能實現,我以前也用C#寫過,主要還是發送各類請求和正則解析數據比較繁瑣些,總體來說沒啥不好的,就是效率要差一些, 用nodej
Nodejs學習筆記(十二)—定時任務(node-schedule)
sch 接下來 bsp 消息 分享 學習筆記 day 筆記 定時器 寫在之前 在實際開發項目中,會遇到很多定時任務的工作。比如:定時導出某些數據、定時發送消息或郵件給用戶、定時備份什麽類型的文件等等 一般可以寫個定時器,來完成相應的需求,在node.js中自已實現也
javaweb學習筆記(十七):JDBC(3)
目錄 1.模擬事務回滾 2.BeanUtils元件 3.元資料 1.模擬事務回滾 當Jdbc程式向資料庫獲得一個Connection物件時,預設情況下這個Connection物件會自動向資料庫提交在它上面傳送的SQL語句。若想關閉這種預設提交方式,讓多條SQL
python基礎教程(第三版)學習筆記(十七)
第十七章 擴充套件Python 這門語言功能強大,但有時候速度有點慢。 Python的目標是易於使用以及幫助提高開發速度,這種靈活 性是以犧牲效率為代價的。 但如果你真的很 在乎速度,C、C++、Java和Julia等語言通常要快好幾個數量級。 17.1 魚和熊掌兼得 本章討論確實需要進
Effective_STL 學習筆記(十七) 使用 “交換技巧” 來修整過剩的容量
避免 vector 持有它不再需要的記憶體,你需要把它從曾經最大的容量減少到它現在需要的容量。這樣的減少容量的方法常被稱為“收縮到合適”。可以這樣做: 1 vector<Contestant>( contestants ).swap( contestants );
機器學習筆記(十七):TensorFlow實戰九(經典卷積神經網路:ResNet)
1 - 引言 我們可以看到CNN經典模型的發展從 LeNet -5、AlexNet、VGG、再到Inception,模型的層數和複雜程度都有著明顯的提高,有些網路層數更是達到100多層。但是當神經網路的層數過高時,這些神經網路會變得更加難以訓練。 一個特別大的麻煩就在於訓練的時候會產
嵌入式核心及驅動開發之學習筆記(十七) 裝置樹的定義規則和獲取方法
概述 在Linux 2.6中,arch/arm/plat-xxx和arch/arm/mach-xxx中充斥著大量的垃圾程式碼,相當多數的程式碼只是在描述板級細節,而這些板級細節對於核心來講,不過是垃圾,如板上的platform裝置、resource、i2c_board_info、sp
Nodejs學習筆記(十四)— Mongoose介紹和入門 && Nodejs學習筆記(十)--- 與MongoDB的互動(mongodb/node-mongodb-native)、MongoDB入門
目錄 簡介 MongoDB 開源,高效能的NoSQL資料庫;支援索引、叢集、複製和故障轉移、各種語言的驅動程式;高伸縮性; node-mongodb-native mongodb的nodejs驅動; MongoDB安裝(windows) 按照官方說明在win7 64位
OpenCV學習筆記(十七)模板匹配
我的目的就是選取影象中的指示燈,識別那種功能的指示燈亮了,進而知道那種功能打開了。 模板匹配: 模板匹配是傻瓜似的識別,從一副影象中尋找與模板影象相似部分的技術。模板匹配由matchTemplate()函式完成。 介紹兩個函式,matchTemplate()和minMaxL
ESP32 學習筆記(十七)SDMMC Host Driver
SDMMC Host Driver 概述 支援的速度模式 使用SDMMC主機驅動程式 配置匯流排寬度和頻率 更多 概述 在 ESP32 上,SDMMC 主機外設有兩個插槽: 插槽 0(
OWASP WebGoat---安全測試學習筆記(十七)---會話管理缺陷
會話管理缺陷(Session Management Flaws) 主題: 1.會話劫持 概念: 因為HTTP是沒有狀態的,所以就有了會話管理的概念。伺服器通過會話管理,來記憶
pytorch學習筆記(十七):python 端擴充套件 pytorch
pytorch 雖然提供了很多的 op 使得我們很容易的使用。但是當已有的 op 無法滿足我們的要求的時候,那就需要自己動手來擴充套件。 pytorch 提供了兩種方式來擴充套件 pytorch 的基礎