Matthew <ma*****@spamkiller.comwrote:
Hi,
I want to change the precision level of floating point variables and
calculations which is done in php.ini.
However the server I rent for my domain does not give me access to
php.ini, they say 'for security reasons'.
Can the precision level be changed by PHP code as needed?
Thanks and regards, etc..
You can set this parameters at run-time. 16 digits is usually the maximum
value on most platforms, larger values giving only meaningless or "fictional"
digits:
ini_set("precision", "16");
This parameter only set the number of significant digits used by default
when a binary "float" value gets formatted as a "string", not the internal
precision at which calculations are performed (usually 53 bits). Example:
ini_set("precision", "16");
echo 1.0/3.0, "\n"; # =0.3333333333333333
ini_set("precision", "50");
echo 1.0/3.0, "\n"; # =0.33333333333333331482961625624739099293947219848 633
Note that "precision" is involved when:
- a float value gets displayed with echo $f and print $f
- performing an explicit type-cast (string) $f
- on values embedded in literal strings: echo "Average value is $f";
- passing a float to any function expecting a string, so for example
strlen($f) may give differen results also with the same number
depending on the "precision" parameter
- serializing variables/arrays/objects containing floating point numbers,
possibly with loss of precision, so in general $f != unserialize(
serialize( $f ) ); this loss of precision may affect also WEB sessions,
since $_SESSION[] gets automatically serialized at the end of the script
(NOTE: as of PHP 4.3.2 another parameter "serialize_precision" was
introduced, specific for serialized data)
If you need a reliable way to handle high precision numbers, extensions
like BCMATH and libraries as BigFloat are available.
Best regards,
___
/_|_\ Umberto Salsi
\/_\/
www.icosaedro.it