On Thu, 15 Jun 2006, Paritosh Patel wrote:
> I am using ActiveState Perl and I am getting interesting results with
> I use the int() function. Essentially, I get different results as in
> the following. Is this normal for Perl?
>
> I have narrowed my code to the following simple scenario:
>
> my $a = 31.0;
> my $b = 1.8;
> my $c = 2.9;
>
> my $sumy = $a + $b + $c; # $sumy = 35.7
>
> my $yten = $sumy * 10;
> my $ytenint = int($sumy*10);
>
> print "x = " . $yten . " \n"; # output> 357
> print "xint = " . $ytenint . " \n"; # output> 356
>
>
> The output is:
>
> x = 357
> xint = 356
>
> There is some rounding going on which is not intuitive. I am a C/C++
> programmer and am surprised at the output. What should I be using?
Yes, it is a rounding issue, but I wonder why you say it is unintuitive
if you are a C/C++ programmer, as it has exactly the same behavior:
#include <stdio.h>
void main()
{
double a = 31.0;
double b = 1.8;
double c = 2.9;
double sumy = a + b + c;
double yten = sumy * 10;
int ytenint = (int)(yten);
printf("x = %.0f\n", yten);
printf("x = %.15f\n", yten);
printf("xint = %d\n", ytenint);
}
Prints:
x = 357
x = 356.999999999999940
xint = 356
Does that help?
Cheers,
-Jan
_______________________________________________
ActivePerl mailing list
[email protected]
To unsubscribe: http://listserv.ActiveState.com/mailman/mysubs