我們假設你需要 整數與小數一起進行運算,或者 整數除以整數 得到小數這種運算
如果你使用了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"