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

Reply via email to