いろいろ備忘録日記

主に .NET とか Go とか Flutter とか Python絡みのメモを公開しています。

Goメモ-350 (github.com/shopspring/decimalを使って計算)

関連記事

GitHub - devlights/blog-summary: ブログ「いろいろ備忘録日記」のまとめ

概要

以下、自分用のメモです。忘れない内にメモメモ。。。

以下の記事で Go で 他の言語 の decimal みたいなライブラリとして github.com/shopspring/decimal があるのを知りました。

engineering.mercari.com

github.com

自分の手で一度サンプル書いてみないと使い方とは理解できないので、以下にサンプルです。

サンプル

package floatop

import (
    "github.com/devlights/gomy/output"
    "github.com/shopspring/decimal"
)

// UsingDecimalPkg は、小数点計算を github.com/shopspring/decimal パッケージを利用して処理するサンプルです。
//
// # REFERENCES
//   - https://engineering.mercari.com/blog/entry/20201203-basis-point/
//   - https://github.com/shopspring/decimal
//
// # SEE ALSO
//   - examples/basic/floatop/rounding_error.go
func UsingDecimalPkg() error {
    var (
        v = decimal.RequireFromString("0")
    )

    for i := 0; i < 1000; i++ {
        v = v.Add(decimal.RequireFromString(".01"))
    }

    output.Stdoutl("[result]", v.StringFixed(1))

    return nil
}

実行すると以下のようになります。

$ task
task: Task "build" is up to date
task: [run] ./try-golang -onetime

ENTER EXAMPLE NAME: floatop_using_decimal_pkg

[Name] "floatop_using_decimal_pkg"
[result]             10.0


[Elapsed] 450.31µs

参考情報

big package - math/big - Go Packages

decimal --- 十進固定及び浮動小数点数の算術演算 — Python 3.12.0 ドキュメント

Goのおすすめ書籍

Go言語による並行処理

Go言語による並行処理

Amazon


過去の記事については、以下のページからご参照下さい。

サンプルコードは、以下の場所で公開しています。