Golang⼩数操作指南之判断⼩数点位数与四舍五⼊⽬录
⼀、判断⼏位⼩数点
1.判断⼏位⼩数点
⼆、四舍五⼊
1.fmt.Sprintf
2.math.Round(result*pow)
总结
⼀、判断⼏位⼩数点
1.判断⼏位⼩数点
加载 cast 包
go get github/spf13/cast
代码如下(⽰例):
package main
import (
"fmt"
"github/spf13/cast"
"math"
"regexp"
"strconv"
)
func main() {
num1 := 5.335
/
/ 判断⼏位⼩数
decimal, _ := CheckDecimal(cast.ToString(num1), "2")
fmt.Println(decimal)
}
// CheckDecimal 判断⼩数点后⼏位⼩数点
// str 所要判断的⼩数字符串
// n 所要判断的位数
func CheckDecimal(str string, n string) (bool, error) {
// 通过 regexp 的正则⽐较
// ([1-9]\d*) 1-9 的任意位数
// (0) 或者第⼀位是 0
/
/ d{0,`+n+`} 0-n 位数
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/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)
}
结果
从结果可以知道,官⽅包 fmt的四舍五⼊功能不能达到我们的完美预期,四舍可以完成,但五⼊失败,只有当第三位成为六时才可⽣效
2.math.Round(result*pow)
测试:
5.334
5.335
5.336
代码如下(⽰例):
package main
import (
"fmt"
"github/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
}
字符串截取小数点结果
从结果可以知道,math.Round(result*pow) 可以达到我们的完美预期,四舍五⼊可以完成。
总结
当官⽅包不⾜以满⾜我们的需要时,我们需要去寻⼀个可以满⾜需要的⽅法来实现想要的功能,也将会在之后努⼒通过官⽅包实现四舍五⼊,让⾃⼰拓展知识⾯。
到此这篇关于Golang⼩数操作指南之判断⼩数点位数与四舍五⼊的⽂章就介绍到这了,更多相关Golang判断⼩数点与四舍五⼊内容请搜索以前的⽂章或继续浏览下⾯的相关⽂章希望⼤家以后多多⽀持!

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。