要把科學記號轉換成小數形式,把係數中的小數點,依指數所標示的位數移動——正指數往右移,負指數往左移——沒有數字的地方就補零。這種記法由兩個部分組成:一個係數,以及寫在 e 或 E 之後的指數。係數承載的是有效數字,指數則標示出這些數字要被移到哪個真正的位置所對應的十次方,而結果就是一個普通的小數整數或小數,不含任何字母、插入號,或指數符號。舉例來說,6.022e+23——以精簡方式寫出的亞佛加厥常數——展開之後是 602,200,000,000,000,000,000,000。知道規則是一回事;手動處理一個 30 位數的係數則不切實際,這正是為什麼像 Scientific Notation Converter 這種嚴謹的瀏覽器工具,能替你完成這種數字位移,而不會遺失任何位值。

小數形式與科學記號並排看起來是什麼樣子
科學記號與小數形式,是書寫同一個數字的兩種方式。科學記號把一個值壓縮成一個係數與一個指數,而小數形式則把每一個位值都完整拼出來。下表把同樣的五個值,用三種寫法全部列出來,讓它們之間的關係一目了然。
| 小數形式 | 標準化科學記號 | 工程記號 |
|---|---|---|
| 12,345 | 1.2345e+4 | 12.345e+3 |
| 0.0000314 | 3.14e-5 | 31.4e-6 |
| 602,200,000,000,000,000,000,000 | 6.022e+23 | 602.2e+21 |
| -0.00000042 | -4.2e-7 | -420e-9 |
| 0 | 0e+0 | 0e+0 |
注意,每一種標準化的科學記號形式,小數點前面都恰好只有一位非零數字,而工程記號所使用的指數,永遠是 3 的倍數。第二項慣例,正是工程記號能與 kilo-、mega-、giga- 等 SI 詞頭對齊的原因,因為指數本身,就已經直接對應到正確的詞頭,不需要再做額外的運算。根據 Wolfram MathWorld 中 Scientific Notation 這個條目,標準化形式之所以是跨科學領域表示數值的標準做法,正是因為它的係數不會產生歧義。
小數點實際上會移到哪裡
科學記號中的指數,代表的是方向與距離,而不是一個要被實際計算出來的乘數。當你看到像 2.7e+3 這樣的值時,e+3 告訴你要把小數點往右移三位,沒有數字的地方就插入零。所以 2.7 會變成 2700。當指數是負數時,例如 2.7e-3,小數點就往左移三位,同樣在空出來的位置補零,得到 0.0027。
係數可以包含不只一位數字,在移動的過程中,這些數字全部會一起跟著移動。以 1.2345 × 10^4 為實際範例:係數是 1.2345,指數是 4。把小數點往右移四位——1.2345 → 12.345 → 123.45 → 1234.5 → 12345——得到小數形式的 12,345。這五位數字的順序不變;只有小數點在移動。同樣的道理也適用於分數:1.2345 × 10^-4 會變成 0.00012345,因為小數點往左移四位,分數前面會多出四個新的零。
這就是這條規則的全部內容。之所以計算工具仍然有用,是因為係數的長度與指數的量級。像 6.02214076 × 10^23 這樣的值,係數有九位數,指數是正的 23,這代表人眼必須在這些數字之間,追蹤 23 個位值。像 Scientific Notation Converter 這種嚴謹的轉換工具,會把這種數字位移當成文字來處理,所以不會有任何一個位值被遺漏或四捨五入。
如何把科學記號轉換成小數形式
- 開啟 Scientific Notation Converter,點選輸入欄位。
- 輸入一個普通的小數,例如 12345,或是一個 e 記號形式的值,例如 -4.2e-7。用點作為小數分隔符,輸入內容中不要包含逗號、單位,或內嵌的空格。
- 選擇「Convert notation」。頁面會一次產生全部三種形式:標準化科學記號、工程記號,以及完整的小數展開。
- 閱讀輸出結果下方列出的明確限制,這樣你就能知道你的輸入,是否落在這個轉換工具 10,000 位數的係數上限,以及 100,000 個碼元的小數預算之內。
- 點選你需要的那種形式下方的「Copy」按鈕。每一種形式都有自己的按鈕,所以你可以直接取用給程式碼用的科學記號形式、給規格表用的工程記號形式,或給試算表用的完整小數形式,不必重新輸入。
- 修改輸入內容,會立即清除先前的轉換結果與任何先前的錯誤,所以一次全新的貼上動作,會直接取代舊的結果,而不是把兩者混在一起。每一次編輯、轉換與複製操作,都會推進一個工作識別碼,所以一個延遲送達的剪貼簿承諾,不會在輸入內容已經改變之後,還針對舊的值發布訊息。
為什麼大型整數會讓天真的瀏覽器轉換工具出錯
大多數在網頁中執行的計算工具,會直接把數字交給 JavaScript 的 Number 型別處理,而這是一種 64 位元的二進位浮點數格式。這種格式的安全整數上限是 2^53 − 1,也就是 9,007,199,254,740,991。任何超過這個門檻的整數,都無法被精確表示。像 9007199254740993 這種比安全上限多 1 的值,通常會在完全沒有任何警告的情況下,被四捨五入成 9007199254740992。
Scientific Notation Converter 透過把係數當成一串十進位數字字元來處理,避開了這種捨入誤差。這個解析器會把輸入內容,拆解成正負號、整數部分數字、小數部分數字,以及一個可選的、包含帶正負號整數的 e 或 E 指數。標準化、小數展開,以及剪貼簿準備工作,全部都直接在這串文字上進行。只有在指數需要整數運算時,才會用到 BigInt,係數本身則完全不會用到。結果就是,像 9007199254740993 這樣的值,輸出結果依然是 9007199254740993,而不是最接近的可表示浮點數。
這一點在任何底層數字是精確計數的情況下都很重要——零件編號、雜湊值、識別碼,或大型物理常數。一個悄悄發生的捨入誤差,會擴散到下游的每一項計算中,而使用者永遠不會發現。這個轉換工具,透過從頭到尾把數字保留成文字,用一點點速度換取確定性,讓每一個非零的係數數字,都能被完整保留,不被四捨五入、截短,或替換。
科學記號 vs 工程記號
這兩種記法,都是把一個數字表示成係數乘以十的某個次方;差別只在於指數是如何選定的。在標準化科學記號中,指數會讓小數點前面恰好只有一位非零數字,所以 12345 會變成 1.2345e+4。這個指數可以是任何整數,正或負皆可,同樣的數字 12345,寫成 1234.5e+1 或 1234500e-2,在數學上是相等的,但並不是標準化形式。
工程記號的規則更加嚴格:指數必須是 3 的倍數,而係數在小數點前必須有一位、兩位,或三位數字。這項限制,正是讓輸出結果能與 SI 詞頭對齊的慣例。數字 12345 會變成 12.345e+3,0.0000314 會變成 31.4e-6。這種分組方式,搭配像毫伏(mV)或吉赫(GHz)這樣的標籤時感覺很自然,因為指數本身,就已經直接對應到正確的詞頭。
把指數向下取整到 3 的倍數,正是隨意的實作方式最容易出錯的地方。朝零方向的整數除法,會把 1 × 10^-5 變成 0.01 × 10^-3,甚至更糟,可能把正負號弄丟。正確的位移方式,是朝負無窮大方向取整,所以 1e-5 會變成 10e-6,-4.2e-7 會變成 -420e-9。正負號屬於這個數值本身,不會改變指數的分組規則。一個忽略這一點的轉換工具,給你的工程記號結果,是工程師無法信任的,這也是為什麼 Scientific Notation Converter,選擇朝負無窮大方向取整,而不是朝零方向截斷的部分原因。
把指數向下取整到 3 的倍數,正是隨意的實作方式最容易出錯的地方。朝零方向的整數除法,會把 1 × 10^-5 變成 0.01 × 10^-3,甚至更糟,可能把正負號弄丟。正確的位移方式,是朝負無窮大方向取整,所以 1e-5 會變成 10e-6,-4.2e-7 會變成 -420e-9。正負號屬於這個數值本身,不會改變指數的分組規則。一個忽略這一點的轉換工具,給你的工程記號結果,是工程師無法信任的,這也是為什麼 Scientific Notation Converter,選擇朝負無窮大方向取整,而不是朝零方向截斷的部分原因。
嚴謹的轉換工具接受(以及拒絕)哪些輸入
一個嚴謹的解析器,正是讓輸出結果保持精確的關鍵。Scientific Notation Converter 接受一個可選的、放在最前面的正號或負號、一串最多包含一個小數點的十進位數字,以及一個可選的、包含帶正負號整數的 e 或 E 指數。像 .5 這種開頭就是小數點的輸入是可以接受的;單獨一個小數點則不行。數字後面接一個小數點也可以接受。前後多餘的空白會被去除;內嵌的空格則不會。
為了讓這條界線明確,下表列出了這個轉換工具會接受的輸入,以及會用同一則錯誤訊息拒絕的輸入。
| 輸入內容 | 是否接受 | 原因 |
|---|---|---|
| 12345 | 是 | 單純的十進位數字 |
| -4.2e-7 | 是 | 帶正負號的 e/E 指數 |
| .5 | 是 | 開頭是小數點,後面接數字 |
| 1,000 | 否 | 地區化的逗號分隔符 |
| 1 000 | 否 | 內嵌空格 |
| 0x1F | 否 | 十六進位形式 |
| Infinity | 否 | 特殊浮點符號 |
| 1.2.3 | 否 | 重複的小數點 |
| 1e | 否 | 指數缺少數字 |
當輸入失敗時,這個轉換工具會回傳一則錯誤,而不會產生任何部分轉換結果。同樣嚴謹的規則,也套用在大小限制上。原始輸入上限為 20,000 個 UTF-16 碼元,係數上限為 10,000 個十進位數字,完整的小數展開上限為 100,000 個碼元。如果展開結果哪怕只需要多一個碼元,整個轉換就會回傳錯誤——科學記號與工程記號的輸出,不會在這三部分轉換其實並未完成的情況下,被當成已完成的結果呈現出來。在失敗路徑上,不會有任何內容被四捨五入、截短,或用刪節號取代。
標準化輸出,做的是數值正規化,而不是有效數字分析。開頭的零、結尾的零、輸入內容中明確寫出的正號,以及零前面的負號,都不會改變數值本身,所以會被移除。輸入 -0.000e999999,科學記號形式會變成 0e+0,小數形式則變成 0;輸入 001.2300e+2,會變成 1.23e+2、123e+0,以及 123。如果那些結尾的零,原本是用來表達量測精確度的,請另外保留原始紀錄;這個轉換工具不會從格式中推斷不確定度。
如果想快速、精確地完成轉換,又不想遇到任何四捨五入的意外,把你的科學記號貼進 Scientific Notation Converter,只要點一下,就能複製你需要的小數形式。