app开发定制Golang 小数操作之判断几位小数点与四舍五入

Golang app开发定制小数操作之判断几位小app开发定制数点与四舍五入

Golang轻松学习

文章目录


一、app开发定制判断几位小数点

1.判断几位小数点

加载 cast 包

go get github.com/spf13/cast

代码如下(示例):

package mainimport (	"fmt"	"github.com/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
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33
  • 34

二、四舍五入

1.fmt.Sprintf

测试:

5.334
5.335
5.336

代码如下(示例):

package mainimport (	"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)}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23

结果


从结果可以知道,官方包 fmt的四舍五入功能 不能达到我们的完美预期,四舍可以完成,但五入失败,只有当第三位成为六时才可生效

2.math.Round(result*pow)

测试:

5.334
5.335
5.336

代码如下(示例):

package mainimport (	"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}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
  • 18
  • 19
  • 20
  • 21
  • 22
  • 23
  • 24
  • 25
  • 26
  • 27
  • 28
  • 29
  • 30
  • 31
  • 32
  • 33

结果


从结果可以知道,math.Round(result*pow) 可以达到我们的完美预期,四舍五入可以完成。


总结

当官方包不足以满足我们的需要时,我们需要去寻找一个可以满足需要的方法来实现想要的功能,也将会在之后努力通过官方包实现四舍五入,让自己拓展知识面。

希望这个博客能对你有所益处。我是轻王,我为自己代言。
网站建设定制开发 软件系统开发定制 定制软件开发 软件开发定制 定制app开发 app开发定制 app开发定制公司 电商商城定制开发 定制小程序开发 定制开发小程序 客户管理系统开发定制 定制网站 定制开发 crm开发定制 开发公司 小程序开发定制 定制软件 收款定制开发 企业网站定制开发 定制化开发 android系统定制开发 定制小程序开发费用 定制设计 专注app软件定制开发 软件开发定制定制 知名网站建设定制 软件定制开发供应商 应用系统定制开发 软件系统定制开发 企业管理系统定制开发 系统定制开发