当前位置:网站首页>Golang 小数操作之判断几位小数点与四舍五入
Golang 小数操作之判断几位小数点与四舍五入
2022-07-31 16:34:00 【m0_67401228】
Golang 小数操作之判断几位小数点与四舍五入
Golang轻松学习
文章目录
一、判断几位小数点
1.判断几位小数点
加载 cast 包
go get github.com/spf13/cast
代码如下(示例):
package main
import (
"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.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)
}
结果

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

从结果可以知道,math.Round(result*pow) 可以达到我们的完美预期,四舍五入可以完成。
总结
当官方包不足以满足我们的需要时,我们需要去寻找一个可以满足需要的方法来实现想要的功能,也将会在之后努力通过官方包实现四舍五入,让自己拓展知识面。
希望这个博客能对你有所益处。我是轻王,我为自己代言。
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢

【pytorch】1.7 pytorch与numpy,tensor与array的转换

The 2nd China PWA Developer Day

js的toString方法

上传图片-微信小程序(那些年的坑记录2022.4)

【C语言】LeetCode27.移除元素

Huawei's top engineers lasted nine years "anecdotal stories network protocol" PDF document summary, is too strong

Implementing DDD based on ABP

使用 Postman 工具高效管理和测试 SAP ABAP OData 服务的试读版
![[Meetup Preview] OpenMLDB+OneFlow: Link feature engineering to model training to accelerate machine learning model development](/img/f6/311d5a4c70993df6291250d2025d3f.jpg)
[Meetup Preview] OpenMLDB+OneFlow: Link feature engineering to model training to accelerate machine learning model development

MySQL基础篇【单行函数】
随机推荐
Single-cell sequencing workflow (single-cell RNA sequencing)
智能垃圾桶(八)——红外对管传感器(树莓派pico)
宁波大学NBU IT项目管理期末考试知识点整理
二分查找的细节坑
Dialogue with Zhuang Biaowei: The first lesson of open source
Visualize GraphQL schemas with GraphiQL
Mariabackup implements incremental data backup for Mariadb 10.3
SHELL内外置命令
多主复制的适用场景(2)-需离线操作的客户端和协作编辑
SringMVC中个常见的几个问题
Replication Latency Case (1) - Eventual Consistency
牛客 HJ19 简单错误记录
Stuck in sill idealTree buildDeps during npm installation, npm installation is slow, npm installation is stuck in one place
go图书管理系统
Oracle dynamically registers non-1521 ports
The 2nd China PWA Developer Day
C语言-函数
Small program: Matlab solves differential equations "recommended collection"
Oracle动态注册非1521端口
研发过程中的文档管理与工具