当前位置:网站首页>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开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢
阿里三面:MQ 消息丢失、重复、积压问题,如何解决?
最新神作!阿里巴巴刚出炉的面试参考指南(泰山版),我直接狂刷29天
[TypeScript]OOP
Smart Trash Can (8) - Infrared Tube Sensor (Raspberry Pi pico)
C language "the third is" upgrade (mode selection + AI chess)
[pytorch] pytorch automatic derivation, Tensor and Autograd
【C语言】LeetCode27.移除元素
Implementing distributed locks based on Redis (SETNX), case: Solving oversold orders under high concurrency
[Meetup Preview] OpenMLDB+OneFlow: Link feature engineering to model training to accelerate machine learning model development
外媒所言非虚,苹果降价或许是真的在清库存
随机推荐
i.MX6ULL driver development | 33 - NXP original network device driver reading (LAN8720 PHY)
研发过程中的文档管理与工具
多主复制下处理写冲突(1)-同步与异步冲突检测及避免冲突
Visualize GraphQL schemas with GraphiQL
【愚公系列】2022年07月 Go教学课程 021-Go容器之切片操作
How to install CV2 smoothly in Anaconda
[pytorch] pytorch automatic derivation, Tensor and Autograd
jeecg主从数据库读写分离配置「建议收藏」
入职一个月反思
TypeError: unhashable type: ‘list‘
深度学习机器学习理论及应用实战-必备知识点整理分享
The 2nd China PWA Developer Day
ML.NET related resources
小程序:matlab解微分方程「建议收藏」
selenium的常见方法及使用
C程序是如何跑起来的01 —— 普通可执行文件的构成
2022年整理LeetCode最新刷题攻略分享(附中文详细题解)
Design and Implementation of Compiler Based on C Language
使用互相关进行音频对齐
基于ABP实现DDD