Golang小數(shù)操作指南之判斷小數(shù)點位數(shù)與四舍五入
一、判斷幾位小數(shù)點
1.判斷幾位小數(shù)點
加載 cast 包
go get github.com/spf13/cast
代碼如下(示例):
package main import ( "fmt" "github.com/spf13/cast" "math" "regexp" "strconv" ) func main() { num1 := 5.335 // 判斷幾位小數(shù) decimal, _ := CheckDecimal(cast.ToString(num1), "2") fmt.Println(decimal) } // CheckDecimal 判斷小數(shù)點后幾位小數(shù)點 // str 所要判斷的 小數(shù)字符串 // n 所要判斷的 位數(shù) func CheckDecimal(str string, n string) (bool, error) { // 通過 regexp 的 正則比較 // ([1-9]\d*) 1-9 的任意位數(shù) // (0) 或者第一位是 0 // d{0,`+n+`} 0-n 位數(shù) return regexp.MatchString(`^(([1-9]\d*)|(0))(\.\d{0,`+n+`})?$`, str) }
二、四舍五入
1.fmt.Sprintf
測試:
5.334
5.335
5.336
代碼如下(示例):
package main import ( "fmt" "github.com/spf13/cast" "math" "strconv" ) func main() { num1 := 5.334 fmt.Println(Float64Rand(num1,2)) } //四舍五入 func Float64Rand(v float64, dig int) float64 { cDig := strconv.Itoa(dig) val := fmt.Sprintf("%0."+cDig+"f", v) return cast.ToFloat64(val) }
結(jié)果
從結(jié)果可以知道,官方包 fmt的四舍五入功能 不能達(dá)到我們的完美預(yù)期,四舍可以完成,但五入失敗,只有當(dāng)?shù)谌怀蔀榱鶗r才可生效
2.math.Round(result*pow)
測試:
5.334
5.335
5.336
代碼如下(示例):
package main import ( "fmt" "github.com/spf13/cast" "math" "strconv" ) func main() { num1 := 5.334 fmt.Println("num1:",num1) fmt.Println("res1:",FormatFloat(num1,2)) num2 := 5.335 fmt.Println("num2:",num2) fmt.Println("res2:",FormatFloat(num2,2)) num3 := 5.336 fmt.Println("num3:",num3) fmt.Println("res3:",FormatFloat(num3,2)) } func FormatFloat(f float64, dig int) float64 { result := cast.ToFloat64(strconv.FormatFloat(f, 'f', dig+1, 64)) pow := math.Pow(10, float64(dig)) return math.Round(result*pow) / pow }
結(jié)果
從結(jié)果可以知道,math.Round(result*pow) 可以達(dá)到我們的完美預(yù)期,四舍五入可以完成。
總結(jié)
當(dāng)官方包不足以滿足我們的需要時,我們需要去尋找一個可以滿足需要的方法來實現(xiàn)想要的功能,也將會在之后努力通過官方包實現(xiàn)四舍五入,讓自己拓展知識面。
到此這篇關(guān)于Golang小數(shù)操作指南之判斷小數(shù)點位數(shù)與四舍五入的文章就介紹到這了,更多相關(guān)Golang判斷小數(shù)點與四舍五入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
讓go程序以后臺進(jìn)程或daemon方式運(yùn)行方法探究
本文探討了如何通過Go代碼實現(xiàn)在后臺運(yùn)行的程序,最近我用Go語言開發(fā)了一個WebSocket服務(wù),我希望它能在后臺運(yùn)行,并在異常退出時自動重新啟動,我的整體思路是將程序轉(zhuǎn)為后臺進(jìn)程,也就是守護(hù)進(jìn)程(daemon)2024-01-01初學(xué)Go必備的vscode插件及最常用快捷鍵和代碼自動補(bǔ)全
這篇文章主要給大家介紹了關(guān)于初學(xué)vscode寫Go必備的vscode插件及最常用快捷鍵和代碼自動補(bǔ)全的相關(guān)資料,由于vscode是開源免費(fèi)的,而且開發(fā)支持vscode的插件相對比較容易,更新速度也很快,需要的朋友可以參考下2023-07-07Linux系統(tǒng)下Go語言開發(fā)環(huán)境搭建
這篇文章主要介紹了Linux系統(tǒng)下Go開發(fā)環(huán)境搭建,需要的朋友可以參考下2022-04-04GoLang之標(biāo)準(zhǔn)庫encoding/json包
本文主要介紹了GoLang之標(biāo)準(zhǔn)庫encoding/json包,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08