The number stored in $amount is likely to be something like 488714.9999999999 instead of 488715, and since Perl is unlikely to simply upconvert an integer of that size to a floating-point number on its own, it's likely that you're doing some kind of floating-point operations on the number that you haven't shown us. See What Every Programmer Should Know About Floating-Point Arithmetic.
The Perl Cookbook says "When Perl is told to print a floating-point number but not told the precision, it automatically rounds that number to however many decimal digits of precision that your machine supports." If you don't mind the performance hit, you could use bignum for precise calculations. If you don't mind the imprecision (which would not be advisable if this "amount" has anything to do with money), you could use the %016.0f as suggested by choroba. (Update: If all of the calculations you're doing deal only with integers, and in particular if you're ok with integer division, you could also consider integer. Update 2: The reply indicates that this is not an option in this case.)
In reply to Re: Padding with sprintf changing number
by haukex
in thread Padding with sprintf changing number
by sachin raj aryan
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |