無理やりゼロを出力してみた。
return 文が同じ function 内にふたつあるのは気にいらないけど・・・

まだ 0.0004 と 0.0009 は四捨五入しないといけませんね。
よくわからないのにあれこれいじくりまわしていると
さらにどんどん訳が判らなくなっていってそのうち放り出してしまいます。

GAWK JGAWK どちらでもいいみたいですが
JGAWK だとXPのコマンドプロンプトで、画面にはなにも表示されないのに
リダイレクトでファイルには書き出し出来てました。なぜだ。
>「Visual C#」これからは、これ
やっぱり「これ」ですかね。

0.000000 X0
0.000400 X0
0.000900 X0
1.000000 X1.
1.200000 X1.2
1.230000 X1.23
1.234000 X1.234
1.234565 X1.235
1.234333 X1.234
BEGIN{
n = 0
printf "%f\tX%s\n",n ,cut_out( n )
n = 0.0004
printf "%f\tX%s\n",n ,cut_out( n )
n = 0.0009
printf "%f\tX%s\n",n ,cut_out( n )
n = 1
printf "%f\tX%s\n",n ,cut_out( n )
n = 1.2
printf "%f\tX%s\n",n ,cut_out( n )
n = 1.23
printf "%f\tX%s\n",n ,cut_out( n )
n = 1.234
printf "%f\tX%s\n",n ,cut_out( n )
n = 1.234564789
printf "%f\tX%s\n",n ,cut_out( n )
n = 1.234333333
printf "%f\tX%s\n",n ,cut_out( n )
}
# 小数点以下の不要なゼロを出力しない ===============
function cut_out(adrs_dat){
if ( abs(adrs_dat + 0) < 0.001){
new_string = "0"
return new_string
exit
}
string = sprintf("%-.3f", adrs_dat + 0 )
if( index(string,/[0]+$/) == 0 )
m = length(string)
else
m = index(string,/[0]+$/) - 1
# m = index(string,/[0]+$/)
new_string = substr(string,1,m)
return new_string
}
# アブソリュート関数 ===============
function abs(n){
return ( n < 0 ) ? -n : n
}