模板:進制/doc
此頁面是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}}
= Template:Hexadecimal(對比不支援大數運算的模板){{進制 | 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,687
若需要修改數字分隔符號,可以使用混合底數的分隔符號語法來完成,例如將六十進制的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 |
= Template:Replace(將個位數替換掉){{進制 | ! |
| :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 |
= Template:Replace(將個位數替換掉){{進制 | !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{{進制 | -2.5 | 10 | error=yes}}
= mw.lua第527行Lua錯誤:不支援底數 '-2.5' 的進制
使用限制
[編輯原始碼]- 若輸入進制的底數為正整數、輸出進制的底數為正或負的整數,則轉換的數字範圍沒有上限,任意大的數、任何長度的小數位數都能正常轉換
- 若輸入進制的底數為負數且輸入的數字為整數,則能轉換的數字範圍介於±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 | 當模板出錯時,是否要顯示錯誤訊息。 | 布林值 | 非必填 |
參見
[編輯原始碼]- {{進制/模板}}:僅能轉換2-36整數底數進位的模板,純粹由模板語法及parser function寫成,為本模板的舊版本
- 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).