咱們假設你須要 整數與小數一塊兒進行運算,或者 整數除以整數 獲得小數這種運算
若是你使用了decimal, 那麼以後全部的運算你都必須使用decimal,
由於經過它計算出來的結果的類型通通爲decimal.Decimal,與float64和int沒法一塊兒運算。
使用過程以下:
運行: go get github.com/shopspring/decimal
- 在運算開始前,設置你須要的精確的小數位數,自動四捨五入
decimal.DivisionPrecision = 2 // 保留兩位小數,若有更多位,則進行四捨五入保留兩位小數
加法 Add
2.1 + 3 float和int相加
var num1 float64 = 3.1
var num2 int = 2
d1 := decimal.NewFromFloat(num1).Add(decimal.NewFromFloat(float64(num2)))
// 這裏注意了,此時咱們使用一個浮點數 加上 一個整數
// 這裏num2 是整數,因此咱們經過float64()將它強轉爲小數,而後進行計算便可,
// 若是兩個都是小數則無需使用float64()
// 若是是兩個整數也都無需使用float64(), 16/4=4, 16/5=3.2 他們的結果都是 decimal.Decimal 類型,能夠經過reflect.TypeOf()方法進行測試,
減法 Sub,乘法 Mul, 除法 Div 用法均與上述相似,再也不一一列舉。
在計算完成後,返回的數據類型爲decimal.Decimal,如你須要轉換爲常見的數據類型
好比,此時test的類型爲decimal.Decimal,你須要將起轉化爲float64
test := decimal.NewFromFloat(16.25).Div(decimal.NewFromFloat(float64(8)))
// 經過Float64() 方法來實現
windLevel, _ := test.Float64()
// 相似的方法還有 String(), 總之decimal提供了不少實用的數據工具,你們須要計算時能夠看看文檔或者源碼
// Round() 能夠進行四捨五入
NewFromFloat(5.45).Round(1).String() // output: "5.5"