Template:進制
| 此Template被引用於約37,000個頁面。 為了避免造成大規模的影響,所有對此Template的編輯應先於沙盒、測試樣例或您的沙盒上測試。 測試後無誤的版本可以一次性地加入此Template中,但是修改前請務必於討論頁發起討論。 模板引用數量會自動更新。 |
| 此模板使用Lua语言: |
本模板可將任意數字轉成其他进制,只要輸入进制與輸出进制的底數皆為整數,能轉換的數字範圍無上限(使用大數運算),與Module:BaseConvert不同,本模板接受非整數的底數,其輸出可以為任何底數為絕對值介於1到9007199254740900之間(含)的所有實數(含負數)、純虛數和高斯整數的进制。若轉換进制的底數非整數,則能轉的數字有限,此時輸入數必須介於±9007199254740900之間。
- (※)注意請勿使用Module:BaseConvert替代!會導致有使用非整數底數或其他特殊底數的條目全數顯示錯誤內容!
使用方法
第一參數為底數、第二參數為要轉換进制的數。
{{進制 | 底數| 10进制的數字}}{{進制 | 底數| k进制的數字| from=k}}{{進制 | 底數| 10进制的數字| sub=x}}{{進制 | 底數| 10进制的數字| 位數| sub=x}}{{進制 | 底數| k进制的數字| from=k| 位數| sub=x}}
引数
| 引数 | 内容 | 默認值 | 説明 |
|---|---|---|---|
| 1 | 底數 | 無 | 进制的底。可接受任意絕對值介於1到9007199254740900之間(含)的所有實數(含負數)、純虛數和高斯整數。 支援特殊进制: !表示阶乘进制、fibcode表示斐波那契編碼。
|
| 2 | 輸入的數字 | 無 | 要轉換的數。 |
| 3 | 位數 | 1 | 最低數量的數字顯示,達不到時會加「0」。 |
| from | 輸入之數的底數 | 10 | 若輸入的數不是10进制的數字,可在此參數填入輸入之數的底數。 可取絕對值小於9007199254740900(含)的任意複數,或特殊进制( !、fibcode等)
|
| to | 要轉換到的底數 | 無 | 同第一參數。 |
| precision | 小數位數 | 0 | 小數點後的位數,達不到時會加「0」。不填該項會顯示所有位數,但不超過20位數;若輸出底數為整數,則至轉換完畢為止,如遇除不盡的情況則最多輸出輸入小數位數的兩倍位數。 |
| sub | 顯示底數 | 無 | 底数顯示樣式。見#sub的值一節 |
| prefix | 前綴 | 無 | 加在輸出值前的維基代碼。要轉換的數為空時則不加。例如在轉換到十六进制後在前面加上0x。
|
| suffix | 後綴 | 無 | 加在輸出值後的維基代碼。要轉換的數為空時則不加。 |
| default | 默認 | 無 | 輸入數字為空或模板出錯時所輸出的值,默認為空。 |
| error | 顯示錯誤訊息 | no | 布林值,表示當模板出錯時,是否要顯示錯誤訊息。 |
sub的值
|sub= |
內容 | 説明 |
|---|---|---|
| 0 | 無 | 不顯示底數 |
| 1 | 標準 | 用A(b)的形式呈現 |
| 2 | 括號 | 原數加括號、底數不加括號 |
| 3 | 條目連結 | 標準形式並附上有關进制的條目連結 |
| 4 | 底數標示不加括號 | 用Ab的形式呈現,即底數不加括號 |
| 5 | 模式4加條目連結 | 用Ab的形式呈現並附上有關进制的條目連結 |
| 6 | 位數下標底數 | 每個位數都下標底數(表示該位逢幾進位),用於呈現混合底數进制 |
| 6~11 | 同0-5 | 與模式0-5相同,但採用6的模式:每個位數都下標底數 |
| 12 | 位數下標位置底數 | 類似模式6,但下標的數可直接與位數相乘得到該位的值 |
| <其他> | 空 | 視為沒輸入,預設為不顯示底數 |
支援进制
目前支援的进制有:
n整數底數进制:支援一般的进制,如2=二进制、8=八进制、16=十六进制、60=六十进制等;也支援负底数进制n.m非整数进位制:支援底數有小數點的进制(含負底數)±n±mi複底数进制:支援高斯整數底數的进制,如2i=2i进制。純虛數底數支援正純虛數和負純虛數底數的进制,可以轉換小數及分數;其餘高斯整數底數的进制只能轉換高斯整數,且可能會遇到無法支援的情況(部分高斯整數在某些底數之下需要使用小數來表示,而高斯整數进制只支持整數表示)。!阶乘进制:各個位數間以:分隔的阶乘进制!0阶乘进制:以0-9、A-Z表示的阶乘进制!-阶乘进制:以0-9、A-Z表示的阶乘进制,並省略個位數#质数阶乘进制fib斐波那契进制fibcode斐波那契编码- 連分數:僅會轉換小數部分(使用了大數倒數運算,位數越多會越費時)
...b3,b2,b1,b0混合底數进制:例如7,24,60,60;1000表示個位數底數為60、第2位數底數為60、第3位數底數為24、第4位數底數為7、小數第一位數底數為1000,為常見的時間表達方式(7周,24小時,60分鐘,60秒;1000毫秒)。最末兩個字元如果不是數字則倒數第二個字表示位數分隔符號、最後一個字表示小數點,如5,4,3:;代表位數分隔符號為:、小數點為;。若小數點與位數分隔符號皆為點.則代表無位數分隔符號並以0-9、A-Z表示各個位數。
範例
{{進制 | 10| 12345| 8}}= 00012345(作為數字補零模板。){{進制 | 10| 0.12345| precision=8}}= 0.12345000(小數點後補零。){{進制 | 10| 0.12345| 8| precision=8}}= 00000000.12345000(兩側補零。){{進制 | 2| 12345| sub=1}}= 11000000111001(2){{進制 | 8| 12345| 3}}= 30071 (輸出結果超過指定位數不補零){{進制 | 16| -12345}}= −3039{{進制 | 20| -12345| 6| sub=2}}= (−001AH5)20{{進制 | 16| 1AH5| from=20}}= 3039 (從20进制轉成16进制){{進制 | 10| 0x3039}}= 12345 (16进制的表達方式){{進制 | 10| 9007199254740991}}= 9007199254740991{{進制 | 10| 9007199254740991| 20}}= 00009007199254740991(作為數字補零模板。){{進制 | 16| 900719925474099200012345.125}}= BEBC2000000000003039.2(大數運算。){{Hexadecimal | 900719925474099200012345.125| no}}= BEBC2000000000000000(對比不支援大數運算的模板){{進制 | 36| 91730738691298.687842955| precision=3}}= WIKIPEDIA.ORG{{進制 | 2.71828182845904523536| 3.14159265358979323846}}= 10.10100202000211112002(OEIS數列A050948)(圓周率轉換為e进制,非整数进制){{進制 | 60| 3.14159265358979323846| precision=8}}= 3;8,29,44,0,47,25,53,7(OEIS數列A060707)(圓周率轉換為六十进制){{進制 | 10| 3;8,29,44,0,47,25,53,7,24,57,36,17| from=60}}= 3.141592653589793238462(六十进制轉回十进制){{進制 | −10| −8,163| sub=1}}= 9977(−10)(负底数进制){{進制 | 10| 9977| from=−10}}= −8163{{進制 | !| 463| sub=1}}= 3:4:1:0:1:0(!)(阶乘进制){{進制 | !| 463| sub=12}}= 354413021100(阶乘进制並顯示每個位數的底數){{進制 | 1| 20}}= 11111111111111111111(一进制){{進制 | 2.5| 12}}= 120.12010100100210110101(正非整数进位制){{進制 | 3| 321| sub=3}}= 102220(3){{進制 | 2| 1024| 10| sub=A}}= 10000000000 (sub參數錯誤){{進制 | 10| 你}}= 20320(若輸入的字符不是0~9、A-Z則會以字碼值來計算)U+= U+4F60{{進制 | 16| 你}}
底數超過36的进制
底數超過36的进制由於數字0-9及字母A-Z已用盡,因此會採用以下格式表達:[1]
d3,d2,d1,d0;d-1,d-2,d-3
以分號;當作小數點,其中;前方為整數部分、;後方為小數部分。
對於輸入值而言,其關鍵的判斷條件是字串中是否存在分號;,因此若輸入的數值為整數請在末尾加上分號,否則僅會視為數字分位。
{{進制 | 60| 12345}}= 3,25,45{{進制 | 10| 3,25,45| from=60}}= 39330245(逗點被視為數字分位,因此解析成[3][2][5][4][5]60){{進制 | 10| 3,25,45;| from=60}}= 12345(加上分號;以順利讀取成[3][25][45]60){{進制 | 10|= 12345(底數超過36的进制安全的互轉方式就是字尾都加上分號){{進制 | 60| 12345}};| from=60}}
運用這個特性也可以透過轉換成一千进制將十进制的整數輸出為數字分位的格式:
{{進制 | 1000| 12345678}}= 12,345,678
若需要修改數字分隔符號,可以使用混合底數的分隔符號語法來完成,例如將六十進制的60改成60,60:.即可將分隔符號切換成:,例如:
此外,阶乘进制到了36位數之後也會遇到數字0-9及字母A-Z已用盡的情況,因此阶乘进制預設是以以下格式表達:
d3:d2:d1:d0.d-1:d-2:d-3
以點.當作小數點,其中.前方為整數部分、.後方為小數部分。
與上述底數超過36的进制不同,其對於輸入值而言,其關鍵的判斷條件是字串中是否存在冒號:,因此無須額外添加其他符號即可讀取。
{{進制 | !| 39812345}}= 10:9:6:3:1:5:2:2:2:1:0{{進制 | 10| 10:9:6:3:1:5:2:2:2:1:0| from=!}}= 39812345{{進制 | 10|= 39812345{{進制 | !| 39812345}}| from=!}}
阶乘进制有時會省略個位數,因為恆為零。對於有小數點的結果可套用以下語法:
{{replace |= 1:0.0:1:1:1:1:1:1:1:1:1:1:1:1:1:1(將個位數替換掉){{進制 | !||:0.|.}}{{計算 | e}}| precision=15}}{{進制 | !|= 1:0:0.0:1:1:1:1:1:1:1:1:1:1:1:1:1:1{{計算 | e}}| precision=15}}{{進制 | 10|= 2.718281828459{{計算 | e}}}}
另一方面,阶乘进制也可以改成輸入!0來使用數字0-9及字母A-Z表達,惟須注意超過36位數之後可能會出現亂碼或小寫字母(小寫字母和大寫字母視為相同,將導致結果無法轉回原进制)。
{{進制 | !0| 12345}}= 23041110{{進制 | 10| 23041110| from=!}}= 12345{{進制 | !0| 123456789012345}}= 5E61C894452041110{{replace |= 10.011111111111111(將個位數替換掉){{進制 | !0||0.|.}}{{計算 | e}}| precision=15}}{{進制 | !0|= 100.011111111111111{{計算 | e}}| precision=15}}
虛數模式
當輸入底數(from)和輸出底數(to)有一者為虛數或兩者皆為虛數時,會進入虛數模式。一般情況下,符號「i」會被視為數值18,且數字中間的加減號會被忽略,而若進入虛數模式,則末尾的小寫i會被視為虛數單位,且數字中間的加減號會被視為表達式的項。在這個模式下可以轉換以虛數為底的进制,如2i进制。
{{進制 | 2i| 7}}= 10303{{進制 | 2i| 6i}}= 30{{進制 | 2i| 35+23i}}= 121003.2{{進制 | 10| 121003.2| from=2i}}= 35+23i{{進制 | 2i| 5i+5}}= 10331.2{{進制 | 10| 5i+5}}= 685(並未進入虛數模式,「i」被視為數值18、加號被忽略){{進制 | 6i| 52846533.25−4901799.925926i| precision=3}}= WIKIPEDIA.ORG{{進制 | 10i| 97049309−19605920i}}= 123456789
本模板也能轉換高斯整數底數的进制,但高斯整數底數的进制只能轉換高斯整數不支援小數或分數的輸入。部分高斯整數底數可能會遇到無法順利轉換的情況,例如i無法在2+3i底數的进制中以整數表示。
混合底數
混合底數进制的輸入方式為...,base3,base2,base1,base0;base-1,base-2,base-3,base-4,...,其中;為小數點。混合底數的各個底數僅能為正整數。
- 例如
∞,7,24,60;60,1000為個位數逢60進位、第2位數逢24進位、第3位數逢7進位、第4位數後不再進位;小數第一位逢60進位、小數第二位逢1000進位。
末2個字元如果不是數字則是用來指定數字分隔符號以及小數點符號。
- 例如
∞,7,24,60,60:;表示數字分隔符號為:、小數點符號為;。
{{進制 | ∞,7,24,60,60| 3347517}}= 5,3,17,51,57(表示5周3天17時51分57秒的秒數){{進制 | ∞,7,24,60,60:;| 3347517}}= 5:3:17:51:57(改變數字分隔和小數點的符號){{進制 | ∞,7,24,60,60| 3347517| sub=6}}= 5∞37172451605760(標示該位是逢幾進位){{進制 | 10| 12:5:13:30:00| from=∞,7,24,60,60}}= 7738200(可用來計算指定時間的秒數,例如本例為12周5天13時30分所經過的秒數){{進制 | ∞,7,24,60;60,1000| 330225.255}}= 32,5,7,45;15,300(也可以以分鐘為單位;表示32周5天7時45分15秒300毫秒的分鐘數){{進制 | 10| 32,5,7,45;15,300| from=∞,7,24,60;60,1000}}= 330225.255(相反,也可以用來計算指定時間的分鐘數){{進制 | 9,8,7,6,5,4,3,2,1| 12345}}= 23041110(模擬階乘进制){{進制 | !| 12345}}= 2:3:0:4:1:1:1:0{{進制 | 9,8,7,6,5,4,3,2,1| 12345.12| precision=9| sub=6}}= 2837064514131201.010203244526276839(小數點後為給定的底數鏡像順序){{進制 | 10,8,6| 12345}}= 25713(若進位到了範圍外,則取最外的底數,如10,8,6即...10,10,10,10,8,6){{進制 | 10,8,6| 12345| sub=6}}= 2105107101836{{進制 | 0,5,2| 12345}}= 110112021(最前面是零代表循環,0,5,2即...5,2,5,2,5,2){{進制 | 0,5,2| 12345| sub=6}}= 121502151225022512{{進制 | 10| 110112021| from=0,5,2}}= 12345{{進制 | 0,5,2| 12345.54321| sub=6}}= 121502151225022512.25122502151215020512(循環包含小數)
錯誤用法
{{進制}}= (甚麼都沒有輸入是未定義行為){{進制 | default=轉換失敗}}= 轉換失敗{{進制 | 2}}= (只輸入底數沒有輸入其他內容也是未定義行為){{進制 | 2| default=轉換失敗}}= 轉換失敗{{進制 | ∞| 12345}}= 12345(無限大进制等於永遠不會進位因此原數輸出){{進制 | 10| 0,12345| from=∞}}= 12345{{進制 | 10| 12345,12345| from=∞}}= ∞(兩個位數的無限大进制第二個位數的位數值為正無窮,故結果沒有意義){{進制 | 10| 12345,12345| from=∞| error=yes}}= mw.lua第527行Lua错误:底數不能為 '∞'{{進制 | NaN| 12345}}= (無法轉換時預設不輸出){{進制 | NaN| 12345| default=轉換失敗}}= 轉換失敗{{進制 | NaN| 12345| error=yes}}= mw.lua第527行Lua错误:'NaN' 不是有效的底數{{進制 |={{#expr:sqrt(-1)}}| 12345}}{{進制 | 十六| 12345}}= (不支援中文數字){{進制 | 十六| 12345| error=yes}}= mw.lua第527行Lua错误:'十六' 不是有效的底數{{進制 | 3,-2| 12345}}= (混合底數不接受包含負值的底數){{進制 | 3,-2| 12345| error=yes}}= mw.lua第527行Lua错误:不支援非正整數的混合底數 '3,-2' 進制{{進制 | 3,2.5| 12345}}= (混合底數不接受包含非整數的底數){{進制 | 3,2;∞| 123.45}}= 2,0,2,1,1;∞(底數是無窮大時無法呈現小數){{進制 | 1| 1e+17| error=yes}}= mw.lua第527行Lua错误:無法將 '1e+17' 轉換為底數 '1' 的進制{{進制 | 2i| i~2| error=yes}}= mw.lua第527行Lua错误:'i~2' 不是有效的數字(虛數模式下必須確保輸入的數是有效的複數){{進制 | 2i+3| 2.5| error=yes}}= mw.lua第527行Lua错误:底數 '2i+3' 不支援非高斯整數 '2.5' 的轉換{{進制 | 1e+17| 10| error=yes}}= mw.lua第527行Lua错误:底數 '1e+17' 過大(過大的底數因運算精度問題不予計算){{進制 | 0.5| 10| error=yes}}= mw.lua第527行Lua错误:底數的絕對值不能小於1
使用限制
- 若輸入進制的底數為正整數、輸出進制的底數為正或負的整數,則轉換的數字範圍沒有上限,任意大的數、任何長度的小數位數都能正常轉換
- 若輸入進制的底數為負數且輸入的數字為整數,則能轉換的數字範圍介於±9007199254740991之間
- 若輸入進制的底數為負數且輸入的數字不為整數,或輸入、輸出的任一底數為非整數,無論輸入的數是否為整數,則能轉換的範圍受限於浮點數的精度限制,約十進制14位有效數字。
- 所有轉換都受限於WP:模板限制:雖然上述有部分是無理論轉換上限的,但過多的位數可能會超出WP:模板限制
进制的轉換範圍
| 來源进制 | 目標进制 | 範圍 |
|---|---|---|
| 正整數底數进制 | 正整數底數进制 | 任何實數(不限大小) |
| 一进制 負一进制 |
±1048576範圍內(見WP:模板限制,以及測試) | |
| 负底数进制 |
任何實數(不限大小) | |
| 正非整数进位制 | 受限於浮點數精度(十进制14位有效數字) | |
| 阶乘进制 | 任何實數(不限大小) | |
| 斐波那契编码 | 小於9007199254740991的正整數 | |
| 正非整数进位制 | 正整數底數进制 | 受限於浮點數精度(十进制14位有效數字) |
| 负底数进制 | ||
| 正非整数进位制 | ||
| 阶乘进制 | ||
| 斐波那契编码 | 小於9007199254740991的正整數 | |
| 负底数进制 | 正整數底數进制 | ±9007199254740991範圍內 |
| 负底数进制 | ||
| 正非整数进位制 | ||
| 阶乘进制 | ||
| 斐波那契编码 | 小於9007199254740991的正整數 | |
| 任何底數 | 純虛數底數进制 | 14位數以內的任何複數 |
| 高斯整數底數进制 | 14位數以內的高斯整數 |
模板數據
用來把數字轉換成底數為絕對值大於1的正實數、負整數和高斯整數之間的任何進位制
| 参数 | 描述 | 类型 | 状态 | |
|---|---|---|---|---|
| 目標底數 | 1 to base | 目標進位制的底數
| 数字 | 可选 |
| 數字 | 2 number num n | 須轉換的數字 | 字符串 | 必需 |
| 位數補齊 | 3 width | 小數點前至少顯示的位數,達不到時會加「0」。
| 数字 | 可选 |
| 原始底數 | from | 輸入值的進位制,默認為10(如果輸入值以「0x」開頭,則默認為16)。
| 数字 | 可选 |
| 小數計算最大位數 | precision | 小數點後的位數,達不到時會加「0」。不填該項會顯示所有位數,但不超過20位數。
| 数字 | 可选 |
| 輸出模式 | sub | 輸出的模式。可填入0、1、2、4或5。不填則預設為0。1為標準格式,以括弧下標標示底數;2為原數加括弧下標標示底數;3為基於標準格式加上數字及進位制的內部連結;4為下標標示底數不加括弧;5為基於4的格式加上數字及進位制的內部連結 | 数字 | 可选 |
| 前綴 | prefix | 加在輸出值前的維基代碼。例如在轉換到十六進制後在前面加上0x | 内容 | 可选 |
| 後綴 | suffix | 加在輸出值後的維基代碼 | 内容 | 可选 |
| 默認值 | default | 輸入數字為空或模板出錯時所輸出的值,默認為空。 | 内容 | 可选 |
| 顯示錯誤訊息 | error | 當模板出錯時,是否要顯示錯誤訊息。 | 布尔 | 可选 |
參見
- Module:BaseConvert:僅能轉換2-36整數底數進位的Lua模組
- 進位制
參考文獻
- ^ Kennedy, E. S., Abu-r-Raihan al-Biruni, 973-1048, Journal for the History of Astronomy: 65, Bibcode:1978JHA.....9...65K, doi:10.1177/002182867800900106、Aaboe, Asger, Episodes from the Early History of Mathematics, New Mathematical Library 13, 纽约: Random House: 125, 1964 [2017-12-08], (原始内容存档于2017-02-01)
- ^ William J. Gilbert. Arithmetic in Complex Bases (PDF). Mathematics Magazine. 1984-03,. Vol. 57 (No. 2).