浮點數精度問題

目錄

  • ieee754標準
  • 解決方法

和c語言一樣,所有以ieee754標準的語言都有浮點數精度問題,js也有浮點數精度問題,并且因為是弱類型語言這個問題更嚴重,js的Number類型的數據都被視為浮點數

ieee754標準

在這里插入圖片描述
js的數字類型就相當于c語言double類型,是64位的

  • 符號位也是首位
  • 指數位一共11位,表示指數
  • 尾數位一共52位,表示小數點后的數,超出部分舍1進0
    在這里插入圖片描述
    所以我們的小數表示只能是2**-1、2**-2、2**-3以此類推
    也就是0.5,0.25,0.125
    所以像0.1、0.7這些數據就無法精準表示,計算就會出錯
console.log(0.1 + 0.2);  // 0.30000000000000004
console.log(0.1 + 0.7);  // 0.7999999999999999

為了驗證該例子,我們得先知道怎么將浮點數轉換為二進制,整數我們可以用除 2 取余的方式,小數我們則可以用乘 2 取整的方式。
將0.1轉為二進制
0.1 * 2,值為 0.2,小數部分 0.2,整數部分 0

0.2 * 2,值為 0.4,小數部分 0.4,整數部分 0

0.4 * 2,值為0.8,小數部分0.8,整數部分0

0.8 * 2,值為 1.6,小數部分 0.6,整數部分 1

0.6 * 2,值為 1.2,小數部分 0.2,整數部分 1

0.2 * 2,值為 0.4,小數部分 0.4,整數部分 0

0.2 開始循環,也就是0.00110011001100110…
而0.2的二進制為 0.00110011001100110011…
0.1 + 0.2 = 0.011011…
轉為十進制
0.(02)-1+(12)-2+(1**2)-3…
最終在第52位截取(0舍1入)
所以 0.30000000000000004是這么來的

解決方法

通常這種對精度要求高的計算都應該交給后端去計算和存儲,因為后端有成熟的庫來解決這種計算問題。

前端也有幾個不錯的類庫:

Math.js

Math.js 是專門為 JavaScriptNode.js 提供的一個廣泛的數學庫。它具有靈活的表達式解析器,支持符號計算,配有大量內置函數和常量,并提供集成解決方案來處理不同的數據類型。

像數字,大數字(超出安全數的數字),復數,分數,單位和矩陣。 功能強大,易于使用。

decimal.js

JavaScript 提供十進制類型的任意精度數值。

big.js

不僅能夠支持處理 Long 類型的數據,也能夠準確的處理小數的運算。

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

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

相關文章

超大規模數據場景(思路)——面試高頻算法題目

目錄 用4KB內存尋找重復元素 從40個億中產生不存在的整數【位】 如果只讓用10MB空間存儲? 初次遍歷 二次遍歷 用2GB內存在20億個整數中查找出現次數最多的數【分塊】 從億萬個URL中查找問題【分塊 堆】 40億個非負整數中找出現兩次的數【位 不過多個位哈】 …

開源身份和訪問管理方案之keycloak(三)keycloak健康檢查(k8s)

文章目錄 開源身份和訪問管理方案之keycloak(三)keycloak健康檢查啟用運行狀況檢查 健康檢查使用Kubernetes下健康檢查Dockerfile 中 HEALTHCHECK 指令 健康檢查Docker HEALTHCHECK 和 Kubernetes 探針 開源身份和訪問管理方案之keycloak(三&…

FATFS備忘

概述 FATFS文件系統可以掛載SD卡也可以掛載FLASH eMMC等設備 SD卡需要格式化為FAT32模式 塊大小默認即可 移植 SD卡 SD卡扇區大小是 512B SD卡 SDIO模式 可以直接在cubeMX里一鍵設置 先設置好SD卡的設置 這個是選擇支持中文 其余是默認 這個是檢測引腳可以留空 當SD卡插入拔出…

唯美社區源碼AM社區同款源碼

源碼介紹 唯美社區源碼AM社區同款源碼 后端修改application.properties文件內容為你的數據庫 前端修改/config/config.js文件內容為你的后端地址 這兩個文件里要修改的地方我已經用中文標注出來了 截圖 源碼免費下載 唯美社區源碼AM社區同款源碼

現代Web應用的多標簽選擇組件:設計哲學與工程實踐

引言:標簽選擇的重要性與挑戰 在信息爆炸時代,標簽系統已成為內容組織的核心基礎設施。研究表明: 使用標簽系統的平臺用戶留存率提高35% 良好的標簽選擇體驗可提升內容發現效率58% 80%的用戶更傾向于使用提供可視化標簽選擇的應用 本文將…

P3799 小 Y 拼木棒

題目背景 上道題中,小 Y 斬了一地的木棒,現在她想要將木棒拼起來。 題目描述 有 n 根木棒,現在從中選 4 根,想要組成一個正三角形,問有幾種選法? 答案對 1097 取模。 輸入格式 第一行一個整數 n。 第…

Perl 條件語句

Perl 條件語句 引言 在編程中,條件語句是執行分支邏輯的關鍵部分。Perl 作為一種強大的腳本語言,提供了豐富的條件語句,使得開發者能夠根據不同的條件執行不同的代碼塊。本文將深入探討 Perl 中的條件語句,包括 if、unless、els…

流量特征分析-蟻劍流量分析

任務: 木馬的連接密碼是多少 這是分析蟻劍流量,可能是網站的,wireshark過濾http 追蹤流http得到 1就是連接密碼 flag{1}黑客執行的第一個命令是什么 取最后的執行命令。base64解密得 除了id不是蟻劍自帶的命令,其他的都是&…

問題1:Sinal 4在開啟PAC檢查的設備崩潰

? 問題信息 硬件不支持PAC(Pointer Authentication),此類錯誤就是signal 11的錯誤,崩潰信息如下: Build fingerprint: google/sdk_gphone64_arm64/emu64a:16/BP22.250221.010/13193326:userdebug/dev-keys Revision: 0 ABI: arm64 Timestamp: 2025-04-06 11:33:13.923…

FreeRTOS移植筆記:讓操作系統在你的硬件上跑起來

一、為什么需要移植? FreeRTOS就像一套"操作系統積木",但不同硬件平臺(如STM32、ESP32、AVR等)的CPU架構和外設差異大,需要針對目標硬件做適配配置。移植工作就是讓FreeRTOS能正確管理你的硬件資源。 二、…

【C++11(下)】—— 我與C++的不解之緣(三十二)

前言 隨著 C11 的引入,現代 C 語言在語法層面上變得更加靈活、簡潔。其中最受歡迎的新特性之一就是 lambda 表達式(Lambda Expression),它讓我們可以在函數內部直接定義匿名函數。配合 std::function 包裝器 使用,可以…

JavaScript中的Proxy詳解

1. 什么是Proxy? Proxy是ES6引入的一個強大特性,它允許你創建一個對象的代理,從而可以攔截和自定義該對象的基本操作。Proxy提供了一種機制,可以在對象的基本操作,如屬性查找、賦值、枚舉、函數調用等之前或之后執行自…

【git】VScode修改撤回文件總是出現.lh文件,在 ?所有 Git 項目 中全局忽略特定文件

VScode里面powershell被迫關閉 場景解決辦法 場景 系統:Windows IDE:Visual Studio Code 一旦修改代碼,就算撤回也會顯示 解決辦法 第一步:“C:\Users\用戶名字.gitignore_global”:在該路徑下新建.gitignore_glo…

為什么 LoRA 梯度是建立在全量參數 W 的梯度之上

🧠 首先搞清楚 LoRA 是怎么做微調的 我們原來要訓練的參數矩陣是 W W W,但 LoRA 說: 別動 W,我在它旁邊加一個低秩矩陣 Δ W U V \Delta W UV ΔWUV,只訓練這個部分! 也就是說,LoRA 用一個…

Nginx負載均衡時如何為指定ip配置固定服務器

大家在用Nginx做負載均衡時,一般是采用默認的weight權重指定或默認的平均分配實現后端服務器的路由,還有一種做法是通過ip_hash來自動計算進行后端服務器的路由,但最近遇到一個問題,就是希望大部分用戶采用ip_hash自動分配后端服務…

Llama 4 家族:原生多模態 AI 創新的新時代開啟

0 要點總結 Meta發布 Llama 4 系列的首批模型,幫用戶打造更個性化多模態體驗Llama 4 Scout 是有 170 億激活參數、16 個專家模塊的模型,同類中全球最強多模態模型,性能超越以往所有 Llama 系列模型,能在一張 NVIDIA H100 GPU 上運…

【硬件開發技巧】如何通過元器件絲印反查型號

目錄 一、在線數據庫查詢 二、官方資料匹配 三、專業軟件輔助 四、實物比對與場景推斷 五、社區與人工支持 注意事項 一、在線數據庫查詢 專業元器件平臺 Digi-Key、Mouser、ICMaster等平臺支持直接輸入絲印代碼檢索,可獲取芯片型號、技術文檔及替代型號。例如…

【算法/c++】利用中序遍歷和后序遍歷建二叉樹

目錄 題目:樹的遍歷前言題目來源樹的數組存儲基本思想存儲規則示例 建樹算法關鍵思路代碼總代碼 鏈表法 題目:樹的遍歷 前言 如果不是完全二叉樹,使用數組模擬樹,會很浪費空間。 題目來源 本題來自 PTA 天梯賽。 題目鏈接: 樹…

李臻20242817_安全文件傳輸系統項目報告_第6周

安全文件傳輸系統項目報告(第 1 周) 1. 代碼鏈接 Gitee 倉庫地址:https://gitee.com/li-zhen1215/homework/tree/master/Secure-file 代碼結構說明: project-root/├── src/ # 源代碼目錄│ ├── main.c # 主程序入口│ ├…

嵌入式rodata段

在嵌入式軟件開發中,將數據放入只讀數據段(.rodata)具有以下好處及典型應用示例: 好處 數據保護 .rodata段的內容在程序運行時不可修改,防止意外或惡意篡改,提升系統穩定性。 節省RAM資源 只讀數據可直接…