【Tips】Goでfloat64からstringへの変換

Kosei Kurimoto
Feb 19 · 2 min read

Finatextでエンジニアをしている栗本と申します。

普段は、グループ会社のスマートプラスが提供する証券ビジネスプラットフォーム「BaaS(Brokerage as a Service)」の新規機能開発・保守・運用をしています。

現職に就いてからGoを使い始めたので、Go歴としては1年9ヶ月ほどでしょうか。学習コストの小さい言語ですが、ライブラリはそこまで充実してないように思い、大したネタではないのですが、Goの情報がもっとネット上に増えることを願って以前調べたことを書きます。

## float64からstringへの変換

float64の数値を文字列へ変換する際に、fmt.Sprintf(“%g”, num)を多用していたのですが、
https://play.golang.org/p/XJdcIAh7uHV

桁が大きい数字を変換すると指数表記されてしまうことが判明しまして。
https://play.golang.org/p/2stZ8_dNfR0

安定して使える変換はないかと調べたのがきっかけになります。

要件として、

・指数表記にならない
・小数点以下の不要な0は消える

ものを探して色々試した結果がこちら。
https://play.golang.org/p/5A_m9fj5vDQ

fmt.Sprintfはダメそうですね。
strconv.FormatFloatが求めていたものに一番近いようです。
引数で小数点以下の桁数を指定すれば足りない分を0埋め、 「-1」を指定すれば必要な桁数を表示し不要な0が消えてくれます。

strconv.FormatFloat(num, ‘f’, -1, 64)をfloat64 to string変換の標準として使っていきたいと思います。

## 補足

https://play.golang.org/p/3Gp2oBp4rYX
float64の精度はそれなりに高いですが、浮動小数点数であることに変わりはないため、本来の桁数と違いすぎる桁数を指定した場合、誤差が生じるようです。

以上、本当に小ネタですがどなたかのお役に立てれば幸いです。

Finatext

THE Finatext Tech Blog

Kosei Kurimoto

Written by

Finatext

Finatext

THE Finatext Tech Blog

More From Medium

Related reads

Related reads

Related reads

Related reads

What is a Layer?

232

Welcome to a place where words matter. On Medium, smart voices and original ideas take center stage - with no ads in sight. Watch
Follow all the topics you care about, and we’ll deliver the best stories for you to your homepage and inbox. Explore
Get unlimited access to the best stories on Medium — and support writers while you’re at it. Just $5/month. Upgrade