It seems to work fine with the en_US.UTF-8 locale you also have on you box. Don't forget to temporarily force the locale to that en_US value at the run time of your script.
For a variable number of decimal (i.e. no decimal at all when not in input file):
$ LANG=en_US.UTF-8 awk -F, -v OFS=":" '{for(i=1;i<=NF;i++)$i=sprintf("%\047*.*f",length($i),index($i,".")?length($i)-index($i,"."):0,$i)}1' file
-1,979,181,218.70:-4,016,811,628.77:-1,979,181,218.70:-4,016,811,628.77:-4,177,131,974.40:-4,177,131,974.40:-4,177,131,974.40:-4,177,131,974.40
1,573,820,407.52:3,110,040,327.95:3,133,242,365.01:3,133,242,365.01:3,133,242,365.01:3,133,242,365.01
-405,360,811.18:-906,771,300.82:-1,043,889,609.39:-1,043,889,609.39:-1,043,889,609.39:-1,043,889,609.39
For a fixed nimber of decimal even when no decimal provided in input file:
$ LANG=en_US.UTF-8 awk -F, -v OFS=":" '{for(i=1;i<=NF;i++)$i=sprintf("%\047.2f",$i)}1' file
-1,979,181,218.70:-4,016,811,628.77-1,979,181,218.70:-4,016,811,628.77:-4,177,131,974.40:-4,177,131,974.40:-4,177,131,974.40:-4,177,131,974.40
1,573,820,407.52:3,110,040,327.95:3,133,242,365.01:3,133,242,365.01:3,133,242,365.01:3,133,242,365.01
-405,360,811.18:-906,771,300.82:-1,043,889,609.39:-1,043,889,609.39:-1,043,889,609.39:-1,043,889,609.39
If you don't like changing all the locale, you can restrict the change to LC_NUMERIC to the same effect.