Dominique Blas wrote: > Sorry, > > I've found the following bug in mod_perl 1.25 and Perl 5.6.1. > Maybe was it already released but in case not here it is : > > perl -e ' > $a=0.57; > print sprintf("%03d", $a * 100)' > > prints "056" instead of "057" > > Same behaviour with $a=0,58 that prints "057". > > Of course it works for other values and also if you write > > $a=0,57*100; > print sprintf("%03d", $a); > > > Bug in sprintf() ?
No, this is not a bug. %d is the same as int(). Consider: % perl -le '$a=0.57; print int ($a*100)' 56 Now read the manpage: int EXPR int Returns the integer portion of EXPR. If EXPR is omitted, uses "$_". You should not use this func tion for rounding: one because it truncates towards "0", and two because machine representa tions of floating point numbers can sometimes pro duce counterintuitive results. For example, "int(-6.725/0.025)" produces -268 rather than the correct -269; that's because it's really more like -268.99999999999994315658 instead. Usually, the "sprintf", "printf", or the "POSIX::floor" and "POSIX::ceil" functions will serve you better than will int(). this explains the problem. __________________________________________________________________ Stas Bekman JAm_pH ------> Just Another mod_perl Hacker http://stason.org/ mod_perl Guide ---> http://perl.apache.org mailto:[EMAIL PROTECTED] http://use.perl.org http://apacheweek.com http://modperlbook.org http://apache.org http://ticketmaster.com