Golang小數(shù)操作指南之判斷小數(shù)點(diǎn)位數(shù)與四舍五入
一、判斷幾位小數(shù)點(diǎn)
1.判斷幾位小數(shù)點(diǎn)
加載 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ù)點(diǎn)后幾位小數(shù)點(diǎn)
// 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(shí)才可生效
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)官方包不足以滿足我們的需要時(shí),我們需要去尋找一個(gè)可以滿足需要的方法來實(shí)現(xiàn)想要的功能,也將會(huì)在之后努力通過官方包實(shí)現(xiàn)四舍五入,讓自己拓展知識(shí)面。
到此這篇關(guān)于Golang小數(shù)操作指南之判斷小數(shù)點(diǎn)位數(shù)與四舍五入的文章就介紹到這了,更多相關(guān)Golang判斷小數(shù)點(diǎn)與四舍五入內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
讓go程序以后臺(tái)進(jìn)程或daemon方式運(yùn)行方法探究
本文探討了如何通過Go代碼實(shí)現(xiàn)在后臺(tái)運(yùn)行的程序,最近我用Go語言開發(fā)了一個(gè)WebSocket服務(wù),我希望它能在后臺(tái)運(yùn)行,并在異常退出時(shí)自動(dòng)重新啟動(dòng),我的整體思路是將程序轉(zhuǎn)為后臺(tái)進(jìn)程,也就是守護(hù)進(jìn)程(daemon)2024-01-01
初學(xué)Go必備的vscode插件及最常用快捷鍵和代碼自動(dòng)補(bǔ)全
這篇文章主要給大家介紹了關(guān)于初學(xué)vscode寫Go必備的vscode插件及最常用快捷鍵和代碼自動(dòng)補(bǔ)全的相關(guān)資料,由于vscode是開源免費(fèi)的,而且開發(fā)支持vscode的插件相對比較容易,更新速度也很快,需要的朋友可以參考下2023-07-07
利用Go Plugin實(shí)現(xiàn)插件化編程的簡單方法
Golang官方提供了plugin模塊,該模塊可以支持插件開,下面這篇文章主要給大家介紹了關(guān)于如何利用Go Plugin實(shí)現(xiàn)插件化編程的相關(guān)資料,需要的朋友可以參考下2021-10-10
Linux系統(tǒng)下Go語言開發(fā)環(huán)境搭建
這篇文章主要介紹了Linux系統(tǒng)下Go開發(fā)環(huán)境搭建,需要的朋友可以參考下2022-04-04
GoLang之標(biāo)準(zhǔn)庫encoding/json包
本文主要介紹了GoLang之標(biāo)準(zhǔn)庫encoding/json包,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2022-08-08

