A simple function to convert a decimal number to any base from 2 to 36.
Number to Base( number, base )
If( base < 2 or base > 36 or IsEmpty( base ); "";
Let( current digit =
Middle ( "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
Mod ( number; base ) + 1; 1 );
Case( number ≥ base; Number to Base( Div ( number; base ); base ) )
& current digit ) )
Test unit tests
What is a test unit?
// assorted samples
Assert Equals( Number to Base( 1, 2 ), "1" ) &
Assert Equals( Number to Base( 2, 2 ), "10" ) &
Assert Equals( Number to Base( 3, 2 ), "11" ) &
Assert Equals( Number to Base( 4, 2 ), "100" ) &
Assert Equals( Number to Base( 5, 2 ), "101" ) &
Assert Equals( Number to Base( 6, 2 ), "110" ) &
Assert Equals( Number to Base( 7, 2 ), "111" ) &
Assert Equals( Number to Base( 8, 2 ), "1000" ) &
Assert Equals( Number to Base( 10, 16 ), "A" ) &
Assert Equals( Number to Base( 11, 16 ), "B" ) &
Assert Equals( Number to Base( 12, 16 ), "C" ) &
Assert Equals( Number to Base( 13, 16 ), "D" ) &
Assert Equals( Number to Base( 14, 16 ), "E" ) &
Assert Equals( Number to Base( 15, 16 ), "F" ) &
Assert Equals( Number to Base( 16, 16 ), "10" ) &
Assert Equals( Number to Base( 17, 16 ), "11" ) &
Assert Equals( Number to Base( 18, 16 ), "12" ) &
Assert Equals( Number to Base( 19, 16 ), "13" ) &
Assert Equals( Number to Base( 20, 16 ), "14" ) &
Assert Equals( Number to Base( 21, 16 ), "15" ) &
Assert Equals( Number to Base( 22, 16 ), "16" ) &
Assert Equals( Number to Base( 23, 16 ), "17" ) &
Assert Equals( Number to Base( 24, 16 ), "18" ) &
Assert Equals( Number to Base( 25, 16 ), "19" ) &
Assert Equals( Number to Base( 26, 16 ), "1A" ) &
Assert Equals( Number to Base( 27, 16 ), "1B" ) &
Assert Equals( Number to Base( 28, 16 ), "1C" ) &
Assert Equals( Number to Base( 29, 16 ), "1D" ) &
Assert Equals( Number to Base( 30, 16 ), "1E" ) &
Assert Equals( Number to Base( 31, 16 ), "1F" ) &
Assert Equals( Number to Base( 255, 16 ), "FF" ) &// rest of the alphabet
Assert Equals( Number to Base( 16, 36 ), "G" ) &
Assert Equals( Number to Base( 17, 36 ), "H" ) &
Assert Equals( Number to Base( 18, 36 ), "I" ) &
Assert Equals( Number to Base( 19, 36 ), "J" ) &
Assert Equals( Number to Base( 20, 36 ), "K" ) &
Assert Equals( Number to Base( 21, 36 ), "L" ) &
Assert Equals( Number to Base( 22, 36 ), "M" ) &
Assert Equals( Number to Base( 23, 36 ), "N" ) &
Assert Equals( Number to Base( 24, 36 ), "O" ) &
Assert Equals( Number to Base( 25, 36 ), "P" ) &
Assert Equals( Number to Base( 26, 36 ), "Q" ) &
Assert Equals( Number to Base( 27, 36 ), "R" ) &
Assert Equals( Number to Base( 28, 36 ), "S" ) &
Assert Equals( Number to Base( 29, 36 ), "T" ) &
Assert Equals( Number to Base( 30, 36 ), "U" ) &
Assert Equals( Number to Base( 31, 36 ), "V" ) &
Assert Equals( Number to Base( 32, 36 ), "W" ) &
Assert Equals( Number to Base( 33, 36 ), "X" ) &
Assert Equals( Number to Base( 34, 36 ), "Y" ) &
Assert Equals( Number to Base( 35, 36 ), "Z" ) &// zero
Assert Equals( Number to Base( 0, 2 ), "0" ) &
Assert Equals( Number to Base( 0, 8 ), "0" ) &
Assert Equals( Number to Base( 0, 16 ), "0" ) &
Assert Equals( Number to Base( 0, 17 ), "0" ) &
Assert Equals( Number to Base( 0, 36 ), "0" ) &// bases
Assert Equals( Number to Base( 2, 2 ), "10" ) &
Assert Equals( Number to Base( 3, 3 ), "10" ) &
Assert Equals( Number to Base( 4, 4 ), "10" ) &
Assert Equals( Number to Base( 8, 8 ), "10" ) &
Assert Equals( Number to Base( 16, 16 ), "10" ) &
Assert Equals( Number to Base( 17, 17 ), "10" ) &
Assert Equals( Number to Base( 25, 25 ), "10" ) &
Assert Equals( Number to Base( 36, 36 ), "10" ) &// extremes
Assert Equals( Number to Base( 1, 1 ), "" ) &
Assert Equals( Number to Base( 1, 37 ), "" ) &
Assert Equals( Number to Base( 1, "" ), "" ) &
Assert Equals( Number to Base( "", 1 ), "" ) &
Assert Equals( Number to Base( "", "" ), "" )
Technorati tags: FileMaker, FileMaker 7, FileMaker 8, custom function.
Comments