in reply to Why do these produce different values?

perl -e "printf '%.20f', 44123.2 / 959.2; 45.99999999999999300000

Numbers have 52 bits of precision. print round off a few of the least significant of the 52 bits. In this case, this causes 45.999999999999993 to display as 46.

int, on the other hand, truncates 45.999999999999993 to 45.

So why is the answer 45.999999999999993 and not 46? That's because 44123.2 and/or 959.2 is a periodic number in binary, or one of the intermidiary numbers in the conversion from string to number is a periodic number in binary. Others and searches will provide more info on this.