さて

printfの挙動がなぜこうなっているのかについては、Cをエミュレートしているから、と言う結論になった。では、いままで単に整数という理由だけで%dを使っていた場合はどうやって修正すればいいのだろうか。
当然ながらいくつか方法がある。まずは、printfを使い続ける場合だ。

printf "%f", $number;
printf "%s", $number;

%fを使う場合だが、この場合だと不動小数点型なので誤差が出る。MLにおいての今回のスレッドでの最大の失言は間違いなくこれだろう。大学で友人にも突っ込まれた。鬱。
次に、%sを使う場合だが、$numberが本当に数値であるかどうかが疑わしいので、以下のようにエスケープしてやるのがいいだろう。

use bignum;
printf "%s", int($number);

それ以外にも、当然だが方法はある。一番良いのはテンプレートを使用する方法だろう。ただし、テンプレートを使うと、少し大掛かりになってしまう。一行や二行出力するだけなのに、モジュールをuseして(1行)、モジュールをnewして(2行)、モジュールにテンプレートを与えて(3行)、モジュールにパラメーターを与えて(4行)、モジュールを使って出力する(5行)というのはメンドクサイ。