【GO】桁数の分からない数値を文字列にする


桁数を指定せずに大きな数値や精度の高い数値をそのまま文字列にしようとすると、途中で切れたり指数表記になったりする。

float64の数値をそのまま(非指数表記)でstringに変換したい。

簡単そうで意外にできなかったので方法を覚書きしておく。

fmtパッケージの変換

fmt.Sprint()fmt.Sprintf()を使う方法を考える。

確認用に同じ変換をするPrint関数を使ってどうなるか見てみる。

%fはno exponent(非指数)、%eはscientific notation(指数表記)、%gは多少複雑だけど大体一番短い表記に変換される。

%fがちょうどよく変換してくれないかと期待したけどデフォルトでは小数点6桁になってしまうらしい(使い物にならない…)。

最後の%8.0f%.8fは期待通りの表示になるけど桁数の指定が必要になる。

strconvパッケージの変換

この問題はstrconv.FormatFloat()を使う方法で解決できた。

FormatFloatは基本的に有効桁数を引数に入れる必要がある。

 

しかし -1 を指定することで数値に対応した桁数を文字列にしてくれる。

The special precision -1 uses the smallest number of digits necessary such that ParseFloat will return f exactly.

 

これでどんな桁数や精度の数値もそのまま文字列にすることができた。


コメントを残す

メールアドレスが公開されることはありません。