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