Skip site navigation (1)Skip section navigation (2)

FreeBSD Manual Pages


home | help
FixedPrecision(3)     User Contributed Perl Documentation    FixedPrecision(3)

       Math::FixedPrecision - Decimal Math without Floating Point Errors

       use Math::FixedPrecision; $height  = Math::FixedPrecision->new(12.362);
       # 3 decimal places $width   = Math::FixedPrecision->new(9.65);	  # 2
       decimal places $area    = $height * $width; # area is now 119.29	not
       119.2933	$length	 = Math::FixedPrecision->new("100.00");	# 2 decimal
       places $section = $length / 9; #	section	is now 11.11 not 11.1111111...

       There are numerous instances where floating point math is unsuitable,
       yet the data does not consist solely of integers.  This module employs
       new features in Math::BigFloat to automatically maintain	precision
       during math operations.	This is	a convenience module, since all	of the
       operations are handled by Math::BigFloat	internally.  You could do
       everything this module does by setting some attributes in
       Math::BigFloat.	This module simplifies that task by assuming that if
       you specify a given number of decimal places in the call	to new() then
       that should be the precision for	that object going forward.

       Please examine assumptions you are operating under before deciding
       between this module and Math::BigFloat.	With this module the
       assumption is that your data is not very	accurate and you do not	want
       to overstate any	resulting values; Math::BigFloat can unintentially
       inflate the apparent accuracy of	a calculation.

       The constructor accepts either a	number or a string that	looks like a
       number.	But if you want	to enforce a specific precision, you either
       need to pass an exact string or include the second term.	 In other
       words, all of the following variables have different precisions:

	 $var1 = Math::FixedPrecision->new(10);
		 # 10 to infinite decimals
	 $var2 = Math::FixedPrecision->new(10,2);
		 # 10.00 to 2 decimals
	 $var3 = Math::FixedPrecision->new("10.000");
		 # 10.000 to 3 decimals

       All calculations	will return a value rounded to the level of precision
       of the least precise datum.  A number which looks like an integer (like
       $var1 above) has	infinite precision (no decimal places).	 This is
       important to note since Perl will happily truncate all trailing zeros
       from a number like 10.000 and the code will get 10 no matter how	many
       zeros you typed.	 If you	need to	assert a specific precision, you need
       to either explicitly state that like $var2 above, or quote the number
       like $var3.  For	example:

	 $var4 = $var3 * 2; # 20.000 to	3 decimals
	 $var5 = Math::FixedPrecision->new("2.00");
		 # 2.00	to 2 decimals
	 $var6 = $var3 * $var 5;
		 # 20.00 to 2 decimals,	not 3

   EXPORT None by default.
       John Peacock <>


perl v5.32.1			  2002-05-24		     FixedPrecision(3)


Want to link to this manual page? Use this URL:

home | help