私は辞書を使っていくつかのテストに取り組んでいました。これを行うために、データベースから必要な Float64 値をコピーしてテスト構造体配列に貼り付ける形式で出力しましたが、テストが失敗したときに値が異なることに気付きましたが、のみによって0.0000000000002
次に、値を確認するために、ループで次のように記述しました。
fmt.Printf("%f\n",value)
fmt.Println(value)
そして、次の値が返されました。
702.200000
702.1999999999998
5683.090000
5683.089999999998
975.300000
975.3
ドキュメントを確認したところ、Float64 に特別な表記法があること、または %f が Float32 の Float64 を置き換えることを示すものは何も見られませんでしたが、%v
orを使用しても問題は発生せず、適切な場合に%g
使用することがドキュメントで指定されています。%f
.
どちらかを使用して12の精度を指定しても問題はありませんが%.12f
、ドキュメントではデフォルトの精度が指定されていません。
なぜこれが起こるのですか?
編集: これは複製と同じ問題ですが、Adrien の説明がより詳細であると思います。