# NAME

Math SigDig - Perl extension for Math

# SYNOPSIS

``````  #Example 1 (Using default of 3 significant digits):

use Math::SigDig;
print(sigdig(12.3456789));
#prints "12.3"

#Example 2 (Argument 2: Custom number of significant digits):

use Math::SigDig;
print(sigdig(12.3456789,4));
#prints "12.35"

#Example 3 (Signs & exponents are allowed):

use Math::SigDig;
print(sigdig("-12.345e-6789",2));
#prints "-12e-6789"

#Example 4 (No zero-padding by default):

use Math::SigDig;
print(sigdig(12.00456789,4));
#prints "12"

#Example 5 (Argument 3 [0 or non-zero]: Padding with zeros):

use Math::SigDig;
print(sigdig(12.00456789,4,1));
#prints "12.00"

#Example 6 (Fill/no-chop mode where arg2 = 0 & arg3 > 0):

use Math::SigDig;
print(sigdig(12.00456789,0,4),",",sigdig(12,0,4));
#prints "12.00456789,12.00"

#Example 7 (Getting number of significant digits):

use Math::SigDig;
\$n = getsigdig(12.3456789);
#\$n = 9

#Example 8 (Signs & exponents are allowed):

use Math::SigDig;
\$n = getsigdig("+12.3456789e+123");
#\$n = 9

#Example 9 (Assumed significance except leading whole-number zeros):

use Math::SigDig;
\$n = getsigdig("0001000.000");
#\$n = 7

#Example 10 (Using the significant digits argument (arg 2) [0 or non-zero]:
#            No trailing zeros, unless decimal present):

use Math::SigDig;
\$n = getsigdig(1000,1);
#\$n = 1
\$n = getsigdig("1000.000",1);
#\$n = 7

#Example 11 (Using the pad argument (arg 3) [0 or non-zero]:
#            No trailing zeros, inc. decimals):

use Math::SigDig;
\$n = getsigdig("1000.000",0,1); #Arg 2 is ignored when arg3 is non-zero
#\$n = 1

#Example 12 (Doing math):

use Math::SigDig;
\$x = 12.3456789;
\$y = 12.34;
\$nx = getsigdig(\$x);
\$ny = getsigdig(\$y);
\$z = sigdig(\$x * \$y,                #Multiplication
(\$nx<\$ny ? \$nx : \$ny)); #The lesser number of significant digits
#\$z = 152.3``````

# ABSTRACT

Math::SigDig allows you to edit numbers to a significant number of digits (whether they include a decimal point or not). In scientific endeavors, the number of digits that are "significant" in the result of a calculation using 2 numbers is frequently the number of significant digits in the number with the least number of significant digits (e.g. 2.0 * 232.12 = 464.24, where 464.24 is reduced to 2 significant digits: 460).

# DESCRIPTION

Math::SigDig is a module that provides methods to round a number to a specified number of significant digits and count the number of significant digits.

It trims leading zeros. It counts, but trims trailing zeros after a decimal point, unless the pad argument (3) to sigdig is non-zero.

Math::SigDig differs from Math::SigFigs in a number of ways. In this module, a "whole-number" zero in a number without a decimal point does not convey significance, however zeros to the right of a decimal point will make them significant. Exponents are allowed ('e' or 'E'), but left untouched. Prepends a 1 to a number if the first character is 'e' or 'E', indicating an assumed '1'.

No operator overloads are provided, thus you must enforce significant digits by making calls to getsigdig and sigdig with every math operation, as in example 12 above.

Math::SigDig is intended for use in printing and is not reliable in using its outputs in mathematical calculations. Returned values are strings, not floating point or integer values.

# BUGS

No known bugs. Please report them to <robleach@buffalo.edu> if you find any.

Math

# AUTHOR

Robert William Leach, <rleach@princeton.edu>