js關于number類型的計算問題

js中關于number類型的計算

因:在js中,number類型是用于表示數值的基本類型,它遵循 IEEE 754 雙精度浮點數(64 位)標準。這導致在某些計算中可能出現精度問題。

例:console.log(0.1 + 0.2); // 0.30000000000000004

我這里出于個人習慣,使用三方庫big.js來解決精度問題

npm install big.js
import Big from 'big.js';const a = new Big(0.1);
const b = new Big(0.2);
const result = a.plus(b);console.log(result.toString()); // "0.3" ?

順便貼一下常見用法示例,便于我日后追溯

import Big from 'big.js';// 創建 Big 實例
const a = new Big(0.1);
const b = new Big(0.2);// 加法
console.log(a.plus(b).toString()); // "0.3"// 減法
console.log(b.minus(a).toString()); // "0.1"// 乘法
console.log(a.times(b).toString()); // "0.02"// 除法
console.log(b.div(a).toString()); // "2"// 比較
console.log(a.lt(b)); // true(小于)
console.log(a.eq(b)); // false(等于)

在項目過程中,還有很多實際問題需要考慮,比如:new Big中傳入了非法值,(undefined,null,NaN,‘字符串’) 都會出現Invalid number報錯。

嘗試使用方法

  1. 使用??過濾一下?
b.minus(a ?? 0) // 有很大問題,只能過濾null與undefined,并沒有過濾'' 還是會報錯,不可取
  1. 使用??‘’
b.minus(((a ?? '') === '') ? 0 : a) // 過濾掉了'',算是解決了大部分問題
  1. 使用函數封裝
function safeBig(val: any): Big {const num = Number(String(val).trim()) // 這里有個知識點,Number不會拋錯,只會返回NaNreturn isFinite(num) ? new Big(num) : new Big(0)
}// 計算
safeBig(a).minus(safeBig(b))

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

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

相關文章

RAG之大規模解析 PDF 文檔全流程實戰

PDF 文檔在商業、學術和政府領域無處不在,蘊含著大量寶貴信息。然而,從 PDF 中提取結構化數據卻面臨著獨特的挑戰,尤其是在處理數千甚至數百萬個文檔時。本指南探討了大規模解析 PDF 的策略和工具。 PDF解析挑戰 PDF 的設計初衷是為了提供一致的視覺呈現,而非數據提取。這…

TypeScript:類

一、基本概念 TypeScript 類是基于 ES6 類的語法擴展,增加了類型注解和訪問修飾符等特性,提供了更強大的面向對象編程能力。 二、基本語法 class Person {name: string;age: number;constructor(name: string, age: number) {this.name name;this.ag…

搶購Python代碼示例與技術解析

引言:搶購系統的技術挑戰 在當今電子商務高度發達的時代,搶購活動已成為各大電商平臺吸引用戶的重要手段。然而,高并發、低延遲的搶購場景對系統設計提出了嚴峻挑戰。本文將提供一個完整的Python搶購代碼示例,并深入分析其技術實…

實戰分析Cpython逆向

Cpython逆向 Python代碼轉換為C代碼的時候,將會大大增加框架代碼量。 1、正向py->c 先有正向,再有逆向 pip install cython 寫一個簡單的pyx文件 .pyx 文件是由 Cython 編程語言 "編寫" 而成的 Python 擴展模塊源代碼文件 print(&qu…

Modbus轉IEC104網關(三格電子)

產品概述 Modbus轉IE104網關型號SG-TCP-IEC104,是三格電子推出的工業級網關(以下簡稱網關),主要用于Modbus RTU/TCP/ASCII數據采集、DLT645-1997/2007數據采集,可接多功能電力儀表、溫控儀、電表等,將采集…

智能工具協同賦能STEM教育科研|探索LLM大語言模型和數學軟件Maple的創新實踐

LLM 與 Maple:開啟 STEM 教育科研新范式 在當今數字化浪潮下,教育與科研領域正面臨著前所未有的變革機遇。大語言模型(LLM)的橫空出世,為知識生成、問題求解等帶來了全新思路;而數學軟件 Maple 以其強大的…

專項智能練習(定義判斷)_DA_01

1. 單選題 熱傳導是介質內無宏觀運動時的傳熱現象,其在固體、液體和氣體中均可發生。但嚴格而言,只有在固體中才是純粹的熱傳導,在流體(泛指液體和氣體)中又是另外一種情況,流體即使處于靜止狀態&#xff0…

pandas讀取pymysql和解析excel的一系列問題(版本不匹配)

pandas讀取pymysql和解析excel的一系列問題,大部分都是版本不匹配導致的 尤其是pandas,numpy,pymysql,openpyxl不匹配導致 from sqlalchemy import create_engine import numpy as np import pandas as pd conncreate_engine("mysqlpymysql://user:passhost:3…

【中級軟件設計師】網絡攻擊(附軟考真題)

【中級軟件設計師】網絡攻擊(附軟考真題) 目錄 【中級軟件設計師】網絡攻擊(附軟考真題)一、歷年真題二、考點:網絡攻擊1、拒絕服務攻擊(DoS攻擊)2、重放攻擊3、特洛伊木馬4、網絡監聽5、SQL注入…

20250515配置聯想筆記本電腦IdeaPad總是使用獨立顯卡的步驟

20250515配置聯想筆記本電腦IdeaPad總是使用獨立顯卡的步驟 2025/5/15 19:55 百度:intel 集成顯卡 NVIDIA 配置成為 總是用獨立顯卡 百度為您找到以下結果 ?要將Intel集成顯卡和NVIDIA獨立顯卡配置為總是使用獨立顯卡,可以通過以下步驟實現?&#xff…

【C++ | 內存管理】C++ 智能指針 std::shared_ptr 詳解及使用例子代碼

😁博客主頁😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客內容🤑:🍭嵌入式開發、Linux、C語言、C、數據結構、音視頻🍭 🤣本文內容🤣&a…

【CF】Day59——Codeforces Round 914 (Div. 2) D

D. Set To Max 題目: Easy 思路: 簡單題 由于題目的數據給的很小,所以我們可以用 n 的復雜度過,那我們來觀察一下我們應該怎么操作 顯然,如果 a[i] > b[i] 時是無法構造的,同時 a[i] b[i] 時就不用管…

解密企業級大模型智能體Agentic AI 關鍵技術:MCP、A2A、Reasoning LLMs- GPT源代碼解析

解密企業級大模型智能體Agentic AI 關鍵技術:MCP、A2A、Reasoning LLMs- GPT源代碼解析 我們可以稍微看一下, 這是我們GPT的基于它的源代碼產生的可視化的內容。 這邊是model ,我們在談這個sampling的時候,本身首先就是說它這個probability distribution ,會有很多的參數…

AI 推理 | vLLM 快速部署指南

本文是 AI 推理系列的第一篇,近期將更新與 vLLM 的相關內容。本篇從 vLLM 的部署開始,介紹 vLLM GPU/CPU 后端的安裝方式,后續將陸續講解 vLLM 的核心特性,如 PD 分離、Speculative Decoding、Prefix Caching 等,敬請關…

Python-MCPInspector調試

Python-MCPInspector調試 使用FastMCP開發MCPServer,熟悉【McpServer編碼過程】【MCPInspector調試方法】-> 可以這樣理解:只編寫一個McpServer,然后使用MCPInspector作為McpClient進行McpServer的調試 1-核心知識點 1-熟悉【McpServer編…

Linux 常用命令 -hostnamectl【主機名控制】

簡介 hostnamectl 命令中的 “hostname” 顧名思義,指的是計算機在網絡上的名稱,“ctl” 是 “control” 的縮寫,意味著控制。hostnamectl 命令用于查詢和修改系統主機名以及相關的設置。它通過與 systemd 系統管理器交互,允許用…

力扣-二叉樹-101 對稱二叉樹

思路 分解問題為,該節點的左孩子的左子樹和右孩子的右子樹是不是同一棵樹 && 該節點的左孩子的右字數和右孩子的左子樹是不是同一課樹 && 該節點的左右孩子的值相不相同 代碼 class Solution {public boolean isSymmetric(TreeNode root) {// 層…

Nginx技術方案【學習記錄】

文章目錄 1. 需求分析1.1 應用場景1.2 實現目標 2. Nginx反向代理與實現均衡負載2.1 部署架構2.2 架構描述2.2.1 Nginx代理服務器2.2.2 API服務器與API服務器(Backup)2.2.3 nginx.conf配置文件2.2.4 測試方法 3. 高速會話緩存技術3.1 問題背景3.2 使用 R…

Ubuntu22.04怎么退出Emergency Mode(緊急模式)

1.使用nano /etc/fstab命令進入fstab文件下; 2.將掛載項首行加#注釋掉,修改完之后使用ctrlX退出; 3.重啟即可退出緊急模式!

Unity 紅點系統

首先明確一個,即紅點系統的數據結構是一顆樹,并且紅點的數據結構的初始化需要放在游戲的初始化中,之后再是對應的紅點UI側的注冊,對應的紅點UI在銷毀時需要注銷對紅點UI的顯示回調注冊,但是不銷毀數據側的紅點注冊 - …