Hi
I know lots of floats are impossible to represent in 32bit IEEE754, but why is this rounding not preserved through simple arithmetic?
aka print $num is correct
but not print $num-int($num);
What is the easiest way to get rid of those?
$fracstr = sprintf("%.3f",$frac) ?
$ ./nice_num.pl 1234.123 = 1234 0.123000000000047 1000 = 1000 0 0.234 = 0 0.234 4.222 = 4 0.222 130.000 = 130 0 500 = 500 0 345678.345 = 345678 0.34499999997206
----------------------------------------------------
#!/usr/bin/perl -w ################################## # split number in int and fraction my $split_number = sub { my $num = shift; my $int = int($num); my $frac = $num - $int; return [$int,$frac]; }; # main my @testnums = qw(1234.123 1000 0.234 4.222 130.000 500 345678.345); for $n (@testnums) { print "$n = "; for $z (@{&$split_number($n)}) { print "$z "; } print "\n"; }
Thanks
20060113 Janitored by Corion: Added formatting, removed PRE tags
In reply to simple arithmetic creates rounding errors by lreplrep
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |