Zend - The PHP Company




Algorithms

Add Code


Convert to base 10.  

Type: application
Added by: zak
Entered: 19/11/2000
Last modified: 01/12/2000
Rating: **** (3 votes)
Views: 8980
Shows the steps involved in converting a number from a given base to base 10. I wrote the example for a book, but after I was mostly finished it, it seemed too off topic. I hope that someone finds it useful. :)


<?php
# Show the steps involved in converting a number 
# from any base (like octal or hex) to base 10

# See below for examples, instructions and copyright

function show_convert_to_base_10 ($number$base)
{
    
// If the number contains a decimal component
    
if (strstr ($number'.'))
    {
        
// Get the integer and decimal components
        
list ($integer$decimal) = explode ('.'$number);
    }
    else
    {
        
// The number is an integer
        
$integer $number;
    }
    
    print 
"<b>Convert the base $base number $number to a
        base 10 number:</b><blockquote>"
;

    print 
"Convert the integer component ($integer) of the
         number:<blockquote>"
;

    
// Compute the value of the integer component
    // Loop through the integer digit by digit
    // Reverse the number for easier handling
    
$integer strrev ($integer);
    
$length  strlen ($integer);

    for (
$pos 0$pos $length; ++$pos)
    {
        
/*
         PHP lets you treat strings and numbers like arrays
         Specify an offset and get the character at that
         position
        */
        
        
$digit $integer[$pos];
        
        
// Handle character values for digits
        // (for bases greater than 10)
        
if (eregi ('[a-z]'$digit))
        {
            
$digit_value =
                  (
ord (strtolower ($digit))
                  - 
ord ('a')) + 10;
                  
            
$digit "$digit ($digit_value)";
        }
        else
        {
            
$digit_value $digit;
        }

        
// Multiply the current digit by the radix
        // raised to the power of the current position
        
$result $digit_value pow ($base$pos);
        
        print 
"Multiply the value of the digit at position
             
$pos by the value of the radix ($base) raised
             to the power of the position (
$pos):<br />";
             
        print 
"$digit * $base<sup>$pos</sup> = $result
             <br /><br />"
;

        
$sums[] = $result;
    }
    print 
'</blockquote>';

    if (isset (
$decimal))
    {
         print 
"Convert the decimal component (0.$decimal)
         of the number:<blockquote>"
;
        
        
// Pad the number with a leading 0 so that we can
        // start at position 1
        
$decimal '0'.$decimal;
        
$length  strlen ($decimal);

        for (
$pos 1$pos $length; ++$pos) {
            
$digit $decimal[$pos];
            
            
// Handle character values for digits
            // (for bases greater than 10)
            
if (eregi ('[a-z]'$digit))
            {
                 
$digit_value =
                    (
ord (strtolower ($digit))
                    - 
ord ('a')) + 10;

                 
$digit "$digit ($digit_value)";
            }
            else
            {
                 
$digit_value $digit;
            }
            
            
// Multiply the current digit by the radix
            // raised to the power of the current position
            
$result $digit_value pow (1/$base$pos);

            print 
"Multiply the value of the digit at
                position 
$pos by the value of the 1/radix
                (
$base) raised to the power of the position
                (
$pos):<br />";
                
            print 
"$digit * 1/$base<sup>$pos</sup> =
                
$result<br /><br />";

            
$sums[] = $result;
        }
        print 
'</blockquote>';
    }

    
$sums implode (' + '$sums);
    eval (
"$base_10_value = $sums;");

    print 
"</blockquote>The value of the base $base number
        
$number in base 10 is $base_10_value. <br />";

    print 
"This number is derived from the sum of the values
        of the previous operations (
$sums). <br /> <br />";
}

/* 
DESCRIPTION 
============================================================
show_convert_to_base_10:
Shows the steps involved in converting a number from a given
base to base 10. I wrote the example for a book, but after I
was mostly finished it, it seemed too off topic.  I hope
that someone finds it useful. :)
============================================================


CREDITS 
============================================================
Author: J. A. Greant ( zak@nucleus.com ) 
Version 1: November 19, 2000 
============================================================


NOTICES 
============================================================
If you: 
    Modify this code and want to share your changes :) 
    Find a bug 
    Have other questions or comments 

Please write: 
    Zak Greant (zak@nucleus.com) 
============================================================


USAGE EXAMPLES 
============================================================
# Convert a hexadecimal number (base 16)
show_convert_to_base_10 ('FF', 16);

# Convert a binary number (base 2)
show_convert_to_base_10 ('1101001', 2);

# Convert a base 36 number
show_convert_to_base_10 ('1ab.00z9', 36);
============================================================


COPYRIGHT 
============================================================
Copyright (c) 2000 J. A. Greant ( zak@nucleus.com ) 
All rights reserved. 

This function is free software; you can redistribute it 
and/or modify it under the terms of the GNU Lesser General 
Public License as published by the Free Software Foundation;
either version 2.1 of the License, or (at your option) any 
later version. 

This function is distributed in the hope that it will be 
useful,but WITHOUT ANY WARRANTY; without even the implied 
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR 
PURPOSE.  See the GNU Lesser General Public License for more
details. 

You should have received a copy of the GNU Lesser General 
Public License along with this function; if not, write to 
the: 
    Free Software Foundation, Inc. 
    59 Temple Place, Suite 330 
    Boston, MA 
    02111-1307 USA 
    http://www.gnu.org/ 
============================================================
*/
?>


Usage Example


# Convert a hexadecimal number (base 16)
show_convert_to_base_10 ('FF', 16);

# Convert a binary number (base 2)
show_convert_to_base_10 ('1101001', 2);

# Convert a base 36 number
show_convert_to_base_10 ('1ab.00z9', 36);


Rate This Script





Search



This Category All Categories