前端精度計算:Decimal.js 基本用法與詳解

一、Decimal.js 簡介

decimal.js 是一個用于任意精度算術運算的 JavaScript 庫,它可以完美解決浮點數計算中的精度丟失問題。

官方API文檔:Decimal.js

特性:

  1. 任意精度計算:支持大數、小數的高精度運算。

  2. 鏈式調用:簡潔的鏈式操作方式。

  3. 支持所有常見運算:加減乘除、取冪、平方根、取模等。

  4. 跨平臺:可以在瀏覽器和 Node.js 中使用。

安裝
在項目中使用 decimal.js 需要先安裝庫:

// 終端輸入命令 
npm/cnpm/pnpm install decimal.js

二、Decimal.js 的基本用法

  1. 創建 Decimal 對象
    可以通過構造函數創建 Decimal 對象,支持多種格式的輸入。
import Decimal from 'decimal.js'// 創建 Decimal 對象,最好使用字符串,防止原生js數字過大自帶的精度問題,例如12345678987654321const num1 = new Decimal(0.1);// 可以不要new關鍵字,兩種方法等同Decimal(0.1)
const num2 = new Decimal('0.2');
const num3 = new Decimal(0.3);// 得到的結果是一個Decimal對象,需要使用Decimal對象的toString或者toNumber獲取正常數據
console.log(num1.toString()); // 輸出 "0.1"console.log(num2.toString()); // 輸出 "0.2"
  1. 基本運算
    Decimal.js 支持常見的加、減、乘、除等操作。
const num1 = new Decimal(0.1);
const num2 = new Decimal(0.2);console.log(num1.plus(num2).toString()); // 加法:0.3console.log(num1.minus(num2).toString()); // 減法:-0.1console.log(num1.times(num2).toString()); // 乘法:0.02console.log(num1.div(num2).toString()); // 除法:0.5
  1. 鏈式調用
    可以通過鏈式調用簡化復雜的計算邏輯。
const result = new Decimal(0.1).plus(0.2).times(10).div(3);console.log(result.toString()); // 輸出 "1"
  1. 比較大小
    可以通過 Decimal 提供的比較方法來比較兩個數的大小。
const num1 = new Decimal(0.1);
const num2 = new Decimal(0.2);console.log(num1.lessThan(num2)); // trueconsole.log(num1.greaterThan(num2)); //falseconsole.log(num1.equals(0.1)); // true
  1. 數學運算
    Decimal.js 還支持其他常見的數學操作,例如取冪、平方根等。
const num = new Decimal(2);console.log(num.pow(3).toString()); // 8console.log(num.sqrt().toString()); // 1.4142135623730951
  1. 四舍五入與精度控制
    Decimal.js 提供了方便的四舍五入和精度控制方法:
const num = new Decimal(1.23456789);console.log(num.toFixed(2)); // 1.23console.log(num.toPrecision(4)); // 1.235console.log(num.round().toString()); // 1

原文博客: Decimal.js
個人博客: Decimal.js

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/76771.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/76771.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/76771.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SQL Server 數據庫實驗報告

??????? 1.1 實驗題目:索引和數據完整性的使用 1.2 實驗目的: (1)掌握SQL Server的資源管理器界面應用; (2)掌握索引的使用; (3)掌握數據完整性的…

AI繪畫中的LoRa是什么?

Lora是一個多義詞,根據不同的上下文可以指代多種事物。以下將詳細介紹幾種主要的含義: LoRa技術 LoRa(Long Range Radio)是一種低功耗廣域網(LPWAN)無線通信技術,以其遠距離、低功耗和低成本的特…

哈希表(Hashtable)核心知識點詳解

1. 基本概念 定義:通過鍵(Key)直接訪問值(Value)的數據結構,基于哈希函數將鍵映射到存儲位置。 核心操作: put(key, value):插入鍵值對 get(key):獲取鍵對應的值 remo…

數據流和重定向

1、數據流 不管正確或錯誤的數據都是默認輸出到屏幕上,所以屏幕是混亂的。所以就需要用數據流重定向將這兩 條數據分開。數據流重定向可以將標準輸出和標準錯誤輸出分別傳送到其他的文件或設備去 標準輸入(standard input,簡稱stdin&#xff…

詳解 MySQL 索引的最左前綴匹配原則

MySQL 的最左前綴匹配原則主要是針對復合索引(也稱為聯合索引)而言的。其核心思想是:只有查詢條件中包含索引最左側(第一列)開始的連續一段列,才能讓 MySQL 有效地利用該索引。 一、 復合索引的結構 復合…

MyBatis注解開發增刪改查基礎篇

本文是MyBatis注解開發的基礎篇,將通過實際場景,詳細介紹MyBatis注解式開發的使用,這是MyBatis很強大的一個特性,可以直接在接口方法上定義 SQL 語句,從而實現數據庫的增刪改查操作。 本文目錄 一、環境依賴二、創建對…

周末總結(2024/04/05)

工作 人際關系核心實踐: 要學會隨時回應別人的善意,執行時間控制在5分鐘以內 堅持每天早會打招呼 遇到接不住的話題時拉低自己,抬高別人(無陰陽氣息) 朋友圈點贊控制在5min以內,職場社交不要放在5min以外 職場的人際關系在面對利…

【HTML】純前端網頁小游戲-戳破彩泡

分享一個簡單有趣的網頁小游戲 - 彩色泡泡爆破。玩家需要點擊屏幕上隨機出現的彩色泡泡來得分。 <!DOCTYPE html> <html lang"zh"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-wi…

如何實現單例模式?

一、模式定義與核心價值 單例模式&#xff08;Singleton Pattern&#xff09;是一種創建型設計模式&#xff0c;保證一個類僅有一個實例&#xff0c;并提供全局訪問點。其核心價值在于&#xff1a; ??資源控制??&#xff1a;避免重復創建消耗性資源&#xff08;如數據庫連…

Three.js 系列專題 1:入門與基礎

什么是 Three.js? Three.js 是一個基于 WebGL 的 JavaScript 庫,它簡化了 3D 圖形編程,讓開發者無需深入了解底層 WebGL API 就能創建復雜的 3D 場景。它廣泛應用于網頁游戲、可視化、虛擬現實等領域。 學習目標 理解 Three.js 的核心組件:場景(Scene)、相機(Camera)…

藍橋云客---藍橋速算

3.藍橋速算【算法賽】 - 藍橋云課 問題描述 藍橋杯大賽最近新增了一項娛樂比賽——口算大賽&#xff0c;目的是測試選手的口算能力。 比賽規則如下&#xff1a; 初始給定一個長度為 N 的數組 A&#xff0c;其中第 i 個數字為 Ai?。隨后數組會被隱藏&#xff0c;并進行 Q 次…

Oracle遷移達夢遇中斷?試試SQLark的斷點續遷功能!

在企業級數據遷移項目中&#xff0c;如果遷移單表數據量超過億行、占用空間超過100GB時&#xff0c;一旦遇到網絡中斷或遷移報錯&#xff0c;往往需要整表重新遷移&#xff0c;導致效率低下&#xff0c;嚴重影響項目進度。針對這一痛點&#xff0c;SQLark 支持對 Oracle→DM 的…

【C/C++算法】藍橋杯之遞歸算法(如何編寫想出遞歸寫法)

緒論&#xff1a;沖擊藍橋杯一起加油&#xff01;&#xff01; 每日激勵&#xff1a;“不設限和自我肯定的心態&#xff1a;I can do all things。 — Stephen Curry” 緒論?&#xff1a; ———————— 早關注不迷路&#xff0c;話不多說安全帶系好&#xff0c;發車啦&am…

[ctfshow web入門] web5

前置知識 引用博客&#xff1a;phps的利用 當服務器配置了 .phps 文件類型時&#xff0c;訪問 .phps 文件會以語法高亮的形式直接顯示 PHP 源代碼&#xff0c;而不是執行它。.phps被作為輔助開發者的一種功能&#xff0c;開發者可以通過網站上訪問xxx.phps直接獲取高亮源代碼 …

day 8 TIM定時器

一、STM32 定時器概述 1. 定時器的概述定時器的基本功能&#xff0c;但是 STM32 的定時器除了具有定時功能之外&#xff0c;也具有定時器中斷功能&#xff0c;還具有輸入捕獲&#xff08;檢測外部信號&#xff09;以及輸出比較功能&#xff08;輸出不同的脈沖&#xff09;&…

Spring Boot 中使用 Redis:從入門到實戰

&#x1f31f; 前言 歡迎來到我的技術小宇宙&#xff01;&#x1f30c; 這里不僅是我記錄技術點滴的后花園&#xff0c;也是我分享學習心得和項目經驗的樂園。&#x1f4da; 無論你是技術小白還是資深大牛&#xff0c;這里總有一些內容能觸動你的好奇心。&#x1f50d; &#x…

hi3516cv610通過menuconfig關閉的宏記錄

hi3516cv610通過menuconfig關閉的宏記錄 defconfig為 hi3516cv610_debug_defconfig或hi3516cv610_new_defconfig 1、 變為 2、 變為 3、 變為 4、 變為 5、 變為

WebSocket 詳解:構建一個復雜的實時聊天應用

文章目錄 一、前言二、WebSocket 基礎2.1 WebSocket 與 HTTP 的區別2.2 WebSocket 的優點 三、搭建 WebSocket 服務端3.1 安裝 ws 和 redis 庫3.2 創建 WebSocket 服務端3.3 創建用戶身份驗證 四、前端實現 WebSocket 客戶端4.1 創建 Vue 3 項目4.2 實現 WebSocket 連接和用戶注…

【JavaEE進階】Spring AOP入門

歡迎關注個人主頁&#xff1a;逸狼 創造不易&#xff0c;可以點點贊嗎 如有錯誤&#xff0c;歡迎指出~ AOP是Spring框架的第??核?(第??核?是 IoC) 什么是AOP&#xff1f; ? AspectOrientedProgramming&#xff08;?向切?編程&#xff09; 什么是?向切?編程呢? 切…

算法思想之雙指針(一)

歡迎拜訪&#xff1a;霧里看山-CSDN博客 本篇主題&#xff1a;算法思想之雙指針(一) 發布時間&#xff1a;2025.4.4 隸屬專欄&#xff1a;算法 目錄 雙指針算法介紹對撞指針&#xff1a;快慢指針&#xff1a; 例題移動零題目鏈接題目描述算法思路代碼實現 復寫零題目鏈接題目描…