跳至主要內容
Lizely

IEEE 754 浮點數轉換器

將十進位值轉換為 IEEE 754 二進位32 或 二進位64 欄位,並可將精確的位元組或十六進位模式解碼回瀏覽器數值。

隱私權:你的檔案不會離開裝置,所有處理均在瀏覽器本機完成。

使用方式

  1. 1.選擇「十進位到位元」或「位元/十六進位到十進位」,並選擇二進位32 或二進位64。
  2. 2.輸入一個值,轉換並檢視儲存的值、符號、指數、小數、分類、位元與十六進位表示。
  3. 3.複製十六進位值並與實際消費端的精確度與位元序對照,再使用於協議或檔案中。

關於IEEE 754 浮點數轉換器

IEEE 754 浮點數轉換器顯示瀏覽器儲存的二進位32 單精確度或二進位64 雙精確度位元組模式。選擇「十進位到位元」或「位元到十進位」,選擇格式,輸入值,並檢視儲存的數值、十六進位表示、符號、指數、小數、分類以及無偏指數。所有轉換皆透過瀏覽器的 DataView API 完成。

十進位制輸入接受普通十進位記法,並允許選擇性符號、分數與指數。它也接受 Infinity、-Infinity 與 NaN。十六進位數字字面、運算式、逗號、單位與地區特定小數分隔符號則被拒絕。這讓數字解析更加明確,並避免 JavaScript 的隱式轉換,例如將空字串視為零或接受十六進位字元作為十進位值。

對於 binary32,顯示會將 32 位元拆分為一個符號位元、八個指數位元與 23 分數位元。對於 binary64,則會將 64 位元拆分為一個符號位元、11 個指數位元與 52 個分數位元。十六進位數字以最高有效位元為先顯示,binary32 顯示恰好八位元,binary64 則顯示 16 個位元。複製動作會複製這些十六進位數字,並去除 0x 標籤。

編碼會透過 DataView.setFloat32 或 DataView.setFloat64 以大端序位元組順序寫入 JavaScript 數字,然後讀取儲存的值。因此,binary32 會顯示當 binary64 的 JavaScript 輸入被壓縮至單精度時所產生的四捨五入。binary64 會反映瀏覽器的雙精度交換值,而非原始十進位制寫法或任意精度十進位制運算。

解碼接受正好 32 或 64 的二進位制位元,或正好八或 16 的十六進位位元,並允許選擇性 0x 字首作為十六進位。它會將這些位元寫入 ArrayBuffer 並讀取對應的浮點數。此路徑會在顯示中保留輸入的符號、指數與小數部分。JavaScript 仍會將所有 NaN 值顯示為 NaN,因此即使輸入的位元仍然可見,無法透過數值單獨區分不同的 NaN 載入內容。

若指數全為零且小數為零,則分類為零;若小數非零則為次正常數(subnormal)。指數非零且小於全1模式則為正常數。若指數全為1且小數為零則為無限大,若小數非零則為 NaN。無偏指數為指數減去 127(正常二進位32)或減去 1023(正常二進位64)。次正常數使用「1減去偏移量」來計算。

在大多數算術運算中,正零和負零比較時結果相同,但它們的符號位元不同,且在某些運算如倒數時會產生不同的結果。本頁會保留輸入或解碼時的 -0。無限大與 NaN 是特殊的值,不是具有有限無偏指數的普通數字。這個工具會報告它們的分類,而不是 inventing 一個誤導性的指數。

十進位到二進位的轉換不能證明某個十進位值是精確的。許多十進位分數(包括 0.1)需要無限長的二進位展開,並會捨入至最接近的可表示值。大整數在二進位64 中可能損失單位精確度,而二進位32 的精確度損失會更早發生。若應用領域需要精確的金額、識別碼或任意精確度,建議使用十進位或整數庫。

八個外部測試案例涵蓋二進位32 的「1」、「負零」、「正無限大」、「最大有限值」、「最小正次正常數」,以及二進位64 的「1」、「負零」與「π」。其他測試還包含次正常數、無限大、NaN 與二進位輸入邊界解碼。請將位元組與實際消費端(語言、檔案格式、網路協定或硬體規格)對照,因為位元序與精確度是該協議或規格的一部分。

方法與來源

使用大端序的 DataView 浮點數讀取與寫入,提取固定長度的二進位32 或二進位64 符號/指數/小數位元,根據指數與小數模式分類為零/次正常數/正常數/無限大/NaN,並讀取回舍入後的儲存值,不進行手動近似轉換。

常見問題

為何二進位32 會改變我的十進位值?
JavaScript 首先解析雙精確度數值,再透過 DataView 舍入至最接近的可表示二進位32 值,儲存的值即為此縮減結果。
為何有兩個零?
IEEE 754 定義了正零與負零,具有不同的符號位元。它們在一般比較中相等,但在某些運算中可能表現不同。
解碼會保留 NaN 輸入的位元嗎?
輸入的位元會保留顯示,但 ECMAScript 對 NaN 值的處理並無法保證不同位元組的 NaN 值能被區分為數值。

開發者工具 使用指南

查看全部