1. 程式人生 > >Nodejs學習筆記(十七)--- 浮點運算decimal.js

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(
'0.1 以二進位制表示:', a.toString(2)); console.log('0.2 以二進位制表示:', b.toString(2)); console.log('直接加法運算 0.1 + 0.2 =', a + b);
add.js 示例程式碼

  示例: 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(
'直接減法運算 1.0 - 0.7 =', a - b);
sub.js示例程式碼

  示例: 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學習筆記:JDBC3

目錄  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 的基礎