Home
Search Perl pages
Subjects
By activity
Professions, Sciences, Humanities, Business, ...
User Interface
Text-based, GUI, Audio, Video, Keyboards, Mouse, Images,...
Text Strings
Conversions, tests, processing, manipulation,...
Math
Integer, Floating point, Matrix, Statistics, Boolean, ...
Processing
Algorithms, Memory, Process control, Debugging, ...
Stored Data
Data storage, Integrity, Encryption, Compression, ...
Communications
Networks, protocols, Interprocess, Remote, Client Server, ...
Hard World Timing, Calendar and Clock, Audio, Video, Printer, Controls...
File System
Management, Filtering, File & Directory access, Viewers, ...
|
|
|
Internally, your computer represents floating-point numbers in binary.
Floating-point numbers read in from a file, or appearing as literals in
your program, are converted from their decimal floating-point
representation (eg, 19.95) to the internal binary representation.
However, 19.95 can't be precisely represented as a binary floating-point
number, just like 1/3 can't be exactly represented as a decimal
floating-point number. The computer's binary representation of 19.95,
therefore, isn't exactly 19.95.
When a floating-point number gets printed, the binary floating-point
representation is converted back to decimal. These decimal numbers are
displayed in either the format you specify with printf(), or
the current output format for numbers (see $# if you use print. $# has a different default value in Perl5 than it did in Perl4. Changing $# yourself is deprecated.
This affects all computer languages that represent decimal floating-point numbers in binary,
not just Perl. Perl provides arbitrary-precision decimal numbers with the
Math::BigFloat module (part of the standard Perl distribution), but
mathematical operations are consequently slower.
To get rid of the superfluous digits, just use a format (eg,
printf("%.2f", 19.95)) to get the required precision.
Source: Perl FAQ: Data Manipulation Copyright: Copyright (c) 1997 Tom Christiansen and Nathan Torkington. |
Next: Why isn't my octal data interpreted correctly?
Previous: Data: Numbers
(Corrections, notes, and links courtesy of RocketAware.com)
Up to: Floating point math
Rapid-Links:
Search | About | Comments | Submit Path: RocketAware > Perl >
perlfaq4/Why_am_I_getting_long_decimals_.htm
RocketAware.com is a service of Mib Software Copyright 2000, Forrest J. Cavalier III. All Rights Reserved. We welcome submissions and comments
|