|
Posted by Umberto Salsi on 01/14/08 18:26
Matthew <matthew@spamkiller.com> wrote:
> 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.33333333333333331482961625624739099293947219848633
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
Navigation:
[Reply to this message]
|