---
name: "Math::BaseCalc"
section: "3pm"
platform: "linux"
package: "libmath-basecalc-perl"
version: "1.019-3"
release: "Debian 13 (Trixie)"
platforms: ["linux"]
url: "https://new.carta.tech/Math::BaseCalc"
---

# Math::BaseCalc(3pm)

Convert numbers between various bases

## NAME

Math::BaseCalc - Convert numbers between various bases

## VERSION

version 1.019

## SYNOPSIS

```
  use Math::BaseCalc;
  my $calc = new Math::BaseCalc(digits => [0,1]); #Binary
  my $bin_string = $calc->to_base(465); # Convert 465 to binary
  $calc->digits('oct'); # Octal
  my $number = $calc->from_base('1574'); # Convert octal 1574 to decimal
```

## DESCRIPTION

This module facilitates the conversion of numbers between various number bases.  You may define your own digit sets, or use any of several predefined digit sets.

The **to\_base()** and **from\_base()** methods convert between Perl numbers and strings which represent these numbers in other bases.  For instance, if you're using the binary digit set \[0,1\], `$calc`-\>**to\_base**(5) will return the string "101".  `$calc`-\>from\_base("101") will return the number 5.

To convert between, say, base 7 and base 36, use the 2-step process of first converting to a Perl number, then to the desired base for the result:

```
 $calc7  = new Math::BaseCalc(digits=>[0..6]);
 $calc36 = new Math::BaseCalc(digits=>[0..9,'a'..'z']);
 $in_base_36 = $calc36->to_base( $calc7->from_base('3506') );
```

If you just need to handle regular octal & hexdecimal strings, you probably don't need this module.  See the **sprintf()**, **oct()**, and **hex()** Perl functions.

## METHODS

- •

  new Math::BaseCalc

- •

  new Math::BaseCalc(digits=\>...)

  Create a new base calculator.  You may specify the digit set to use, by either giving the digits in a list reference (in increasing order, with the 'zero' character first in the list) or by specifying the name of one of the predefined digit sets (see the **digit()** method below).

  If your digit set includes the character `"-"`, then a dash at the beginning of a number will no longer signify a negative number.

- •

  `$calc`-\>to\_base(NUMBER)

  Converts a number to a string representing that number in the associated base.

  If `"NUMBER"` is a `"Math::BigInt"` object, `"to_base()"` will still work fine and give you an exact result string.

- •

  `$calc`-\>from\_base(STRING)

  Converts a string representing a number in the associated base to a Perl integer.  The behavior when fed strings with characters not in `$calc`'s digit set is currently undefined.

  If `"STRING"` converts to a number too large for perl's integer representation, beware that the result may be auto-converted to a floating-point representation and thus only be an approximation.

- •

  `$calc`-\>digits

- •

  `$calc`-\>digits(...)

  Get/set the current digit set of the calculator.  With no arguments, simply returns a list of the characters that make up the current digit set.  To change the current digit set, pass a list reference containing the new digits, or the name of a predefined digit set. Currently the predefined digit sets are:

  ```
         bin => [0,1],
         hex => [0..9,'a'..'f'],
         HEX => [0..9,'A'..'F'],
         oct => [0..7],
         64  => ['A'..'Z','a'..'z',0..9,'+','/'],
         62  => [0..9,'a'..'z','A'..'Z'],
   Examples:
    $calc->digits('bin');
    $calc->digits([0..7]);
    $calc->digits([qw(w a l d o)]);
  ```

  If any of your "digits" has more than one character, the behavior is currently undefined.

## AUTHOR

Ken Williams, kwilliams@cpan.org

## COPYRIGHT

This is free software in the colloquial nice-guy sense of the word. Copyright (c) 1999, Ken Williams.  You may redistribute and/or modify it under the same terms as Perl itself.

## SEE ALSO

[**perl**(1)](/perl/1.md).
