自訂單位轉換器
自訂單位:模型、公式與最佳實踐
定義您自己的測量單位,錨定到一個「基礎單位」或其他自訂單位。建立線性因子或完整表達式模型,並為您的專案或領域組織一致的單位族系。
基本概念
基於參考的模型
您的參考是另一個自訂單位或「基礎單位」。
轉換表達式將輸入值映射到參考單位的空間中(系統刻意設計為單位無關)。
- 維度安全透過選擇一個參考,您就隱含地將該自訂單位與該族系綁定。保持族系的一致性(例如,相關單位參考相同的基礎)。
- 可組合性之後可以更改參考而無需重新命名單位——只需要調整表達式。
- 可稽核性每個單位都有一個單一、清晰的定義:參考 + 表達式。
因子 vs 表達式
簡單單位使用一個常數因子(例如,1 foo = 0.3048 × 基礎)。
進階單位可以使用帶有函數的表達式(例如,10 * log(x / 1e-3))。
- 常數因子最適合固定的線性關係(長度比例、面積比率等)。
- 表達式使用數學函數處理衍生或非線性的標度(比率、對數、冪)。
- 常數內建常數如 PI, E, PHI, SQRT2, SQRT3, LN2, LN10, LOG2E, LOG10E, AVOGADRO, PLANCK, LIGHT_SPEED, GRAVITY, BOLTZMANN。
命名、符號與一致性
選擇簡短、明確的符號。避免與現有標準衝突。
在您的組織中記錄其意圖——它測量什麼以及為何存在。
- 清晰度偏好使用簡潔的符號(建議 1–4 個字元;使用者介面最多允許 6 個)。
- 穩定性將符號視為跨資料集和 API 的穩定識別碼。
- 風格在合理的情況下使用類似 SI 的大小寫(例如,'foo', 'kFoo', 'mFoo')。
- 一個自訂單位 = 參考單位 + 轉換表達式。
- 參考錨定維度;表達式定義數值映射。
- 對於線性標度,優先使用常數因子;特殊情況下使用表達式。
公式語言
表達式支援數字、變數 x (輸入值)、別名值、常數 (PI, E, PHI, SQRT2, SQRT3, LN2, LN10, LOG2E, LOG10E, AVOGADRO, PLANCK, LIGHT_SPEED, GRAVITY, BOLTZMANN)、算術運算子和常用數學函數。表達式的計算結果為所選參考單位中的一個值。
運算子
| 運算子 | 意義 | 範例 |
|---|---|---|
| + | 加法 | x + 2 |
| - | 減法/一元負號 | x - 5, -x |
| * | 乘法 | 2 * x |
| / | 除法 | x / 3 |
| ** | 次方 (使用 **;^ 會被自動轉換) | x ** 2 |
| () | 優先級 | (x + 1) * 2 |
函數
| 函數 | 簽章 | 範例 |
|---|---|---|
| sqrt | sqrt(x) | sqrt(x^2 + 1) |
| cbrt | cbrt(x) | cbrt(x) |
| pow | pow(a, b) | pow(0.3048, 2) |
| abs | abs(x) | abs(x) |
| min | min(a, b) | min(x, 100) |
| max | max(a, b) | max(x, 0) |
| round | round(x) | round(x * 1000) / 1000 |
| trunc | trunc(x) | trunc(x) |
| floor | floor(x) | floor(x) |
| ceil | ceil(x) | ceil(x) |
| sin | sin(x) | sin(PI/6) |
| cos | cos(x) | cos(PI/3) |
| tan | tan(x) | tan(PI/8) |
| asin | asin(x) | asin(0.5) |
| acos | acos(x) | acos(0.5) |
| atan | atan(x) | atan(1) |
| atan2 | atan2(y, x) | atan2(1, x) |
| sinh | sinh(x) | sinh(1) |
| cosh | cosh(x) | cosh(1) |
| tanh | tanh(x) | tanh(1) |
| ln | ln(x) | ln(x) |
| log | log(x) | log(100) |
| log2 | log2(x) | log2(8) |
| exp | exp(x) | exp(1) |
| degrees | degrees(x) | degrees(PI/2) |
| radians | radians(x) | radians(180) |
| percent | percent(value, total) | percent(25, 100) |
| factorial | factorial(n) | factorial(5) |
| gcd | gcd(a, b) | gcd(12, 8) |
| lcm | lcm(a, b) | lcm(12, 8) |
| clamp | clamp(value, min, max) | clamp(x, 0, 100) |
| sign | sign(x) | sign(-5) |
| nthRoot | nthRoot(value, n) | nthRoot(8, 3) |
表達式規則
- x 是輸入值;別名值也可用。
- 使用明確的乘法(例如,2 * PI,而不是 2PI)。
- 可用常數:PI, E, PHI, SQRT2, SQRT3, LN2, LN10, LOG2E, LOG10E, AVOGADRO, PLANCK, LIGHT_SPEED, GRAVITY, BOLTZMANN。
- 三角函數的角度單位是弧度(使用 degrees() 和 radians() 輔助函數進行轉換)。
- 透過名稱 (snake_case) 或符號參考其他自訂單位;它們當前的 toBase 值會以常數形式注入。
- 使用 ** 表示次方(引擎會自動將 ^ 轉換為 **)。
- 智慧輸入標準化:×, ÷, π, ², ³ 會自動轉換為 *, /, PI, ^2, ^3。
- 可用輔助函數:degrees(), radians(), percent(), factorial(), gcd(), lcm(), clamp(), sign(), nthRoot()。
- 增強的錯誤偵測可防止常見錯誤(負數的對數、負數的平方根、除以零)。
- 自訂單位參考:在表達式中使用其他單位作為變數(例如,'x * A',其中 A 是另一個自訂單位)。
- 空白字元會被忽略;使用括號來控制優先級。
- 對於有效的輸入,表達式必須產生一個有限的數值結果。
- 使用明確的乘法(例如,2 * PI)。
- 三角函數的角度單位是弧度。
- log(x) 是以 10 為底;ln(x) 是自然對數(以 e 為底)。
維度分析與策略
這個自訂系統是單位無關的。透過將相關單位錨定到同一個「基礎單位」(或一個共享的參考)來建立族系模型。在您設計的族系中保持意義的一致性。
模型策略
| 策略 | 使用時機 | 說明 |
|---|---|---|
| 直接因子 | 線性關係(例如,1 foo = k × 基礎)。 | 使用一個常數(沒有 x)。穩定且精確。 |
| 冪次縮放 | 從一個基礎標度衍生(k^2, k^3)。 | 使用 pow(k, n),其中 k 是基礎標度。 |
| 比率或正規化 | 相對於一個參考水平定義的單位(例如,x / ref)。 | 對於指數類型的測量很有用;在表達式中保持 ref 的明確性。 |
| 對數標度 | 感知或功率比標度(例如,dB 風格的 10 * log(x/ref))。 | 確保定義域為正;記錄參考值。 |
| 仿射映射 | 罕見的帶有偏移量的情況(a * x + b)。 | 偏移量會改變零點——僅在概念上合理時應用。 |
編輯器與驗證
用名稱、符號(最多 6 個字元)、顏色標籤、參考(基礎單位或其他自訂單位)和一個因子/表達式來建立單位。編輯器會透過增強的錯誤偵測即時驗證公式,並防止循環參考。
- 參考選項包括「基礎單位」和現有的自訂單位。會產生循環的不安全選項會被自動過濾掉。
- 變數:使用 x (或 value) 代表輸入值。透過 snake_case 名稱或符號參考其他自訂單位;它們當前的 toBase 值會以常數形式注入。
- 支援的常數:PI, E, PHI, SQRT2, SQRT3, LN2, LN10, LOG2E, LOG10E, AVOGADRO, PLANCK, LIGHT_SPEED, GRAVITY, BOLTZMANN。
- 核心函數:sqrt, cbrt, pow, abs, min, max, round, trunc, floor, ceil, sin, cos, tan, asin, acos, atan, atan2, sinh, cosh, tanh, ln, log, log2, exp。
- 輔助函數:degrees(), radians(), percent(), factorial(), gcd(), lcm(), clamp(), sign(), nthRoot() 以增強使用者體驗。
- 運算子:+, -, *, /, ** 用於次方。智慧輸入標準化:×, ÷, π, ², ³ 會自動轉換。
- 即時驗證並附帶預覽(例如,10 x → 結果)、複雜度分類(簡單/中等/複雜)和情境感知建議。
- 增強的錯誤偵測可捕捉常見錯誤:非正數的對數、負數的平方根、除以零。
- 進階的循環偵測可防止單位(直接或間接)依賴自身,並提供清晰的錯誤訊息。
- 互動式說明面板,提供分類範例、可點擊的公式片段和自訂單位按鈕,方便插入。
最佳實踐
- 如果可能,優先使用常數因子;僅在必要時使用表達式。
- 選擇一個穩定、廣為人知且不太可能改變的參考單位。
- 避免循環的參考鏈;保持圖形無環。
- 添加樣本值並與獨立的計算器或已知的恆等式進行交叉核對。
- 為您的組織保持符號簡短、獨特且有文件記錄。
- 如果使用對數,請記錄參考值、底數和 x 的預期定義域。
- 使用 3–5 個代表性數值進行測試,並驗證來回轉換。
- 避免循環參考;選擇一個穩定的參考單位。
- 記錄假設(定義域、偏移量、典型範圍)。
入門範本與範例
這些範例說明了在這個僅限自訂的系統中常見的模型模式。請根據您的需求替換常數和參考。
| 名稱 | 公式 | 參考 | 說明 |
|---|---|---|---|
| 基礎比例單位 (foo) | 0.3048 | 基礎單位 | 定義 1 foo = 0.3048 × 基礎(簡單線性因子)。 |
| 冪次縮放 (foo²) | pow(0.3048, 2) | 基礎單位 | 從一個基礎標度衍生(k^2)。 |
| 體積縮放 (foo³) | pow(0.3048, 3) | 基礎單位 | 從一個基礎標度衍生(k^3)。 |
| 來自參考的指數 | x / 42 | 基礎單位 | 按一個固定水平進行正規化(定義域 x > 0)。 |
| 功率比 (dB-風格) | 10 * log(x / 0.001) | 基礎單位 | 相對於 1 mW 的對數測量(範例)。確保 x > 0。 |
| 幾何因子 | 2 * PI * 0.5 | 基礎單位 | 常數和乘法的範例。 |
| 參考其他自訂單位 | A * 2 | 自訂單位 A | 在表達式中使用另一個單位的符號/名稱作為常數。 |
| 複雜單位關係 | sqrt(x^2 + base_length^2) | 基礎單位 | 使用自訂單位 'base_length' 作為常數的畢氏定理關係。 |
| 帶偏移量的比例單位 | x * scale_factor + offset_unit | 基礎單位 | 使用另外兩個自訂單位作為常數的線性轉換。 |
| 參考單位的百分比 | percent(x, reference_value) | 基礎單位 | 使用輔助函數將輸入表示為另一個自訂單位的百分比。 |
| 受限的單位範圍 | clamp(x * multiplier, min_unit, max_unit) | 基礎單位 | 使用 clamp 輔助函數將數值限制在兩個自訂單位常數之間。 |
| 帶 GCD 的單位比率 | x / gcd(x, common_divisor) | 基礎單位 | 使用 GCD 輔助函數和自訂單位常數的數學關係。 |
| 角度轉換鏈 | degrees(x * PI / reference_angle) | 自訂角度單位 | 使用自訂角度單位和 degrees() 輔助函數轉換為度。 |
治理與協作
- 維護一份經批准的自訂單位目錄,包含所有者和審查日期。
- 當定義演變時使用版本控制;避免對符號進行破壞性更改。
- 記錄常數和參考的來源(標準、文獻、內部文件)。
- 自動化驗證測試(範圍檢查、樣本轉換、單調性)。
常見問題
我應該使用常數因子還是表達式?
只要關係是線性的且固定的,就優先使用常數因子。僅在映射依賴於 x 或需要函數(冪、對數、三角函數)時才使用表達式。
我該如何選擇參考單位?
選擇一個穩定、廣為人知且能捕捉您 intended 維度的單位(例如,長度用米,面積用平方米)。參考單位錨定維度意義。
角度是用度還是弧度?
弧度。在使用三角函數前,將度數乘以 PI/180 進行轉換。
我可以鏈接自訂單位嗎?
可以,但要避免循環。保持圖形無環,並記錄鏈接以保持清晰。