Golang 小数操作之判断几位小数点与四舍五入

2024-03-08 13:50

本文主要是介绍Golang 小数操作之判断几位小数点与四舍五入,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

Golang 小数操作之判断几位小数点与四舍五入

Golang轻松学习

文章目录

  • Golang 小数操作之判断几位小数点与四舍五入
  • 一、判断几位小数点
    • 1.判断几位小数点
  • 二、四舍五入
    • 1.fmt.Sprintf
      • 结果
    • 2.math.Round(result*pow)
      • 结果
  • 总结


一、判断几位小数点

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.fmt.Sprintf

测试:

5.334
5.335
5.336

代码如下(示例):

package mainimport ("fmt""github.com/spf13/cast""math""strconv"
)func main() {num1 := 5.334fmt.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 mainimport ("fmt""github.com/spf13/cast""math""strconv"
)func main() {num1 := 5.334fmt.Println("num1:",num1)fmt.Println("res1:",FormatFloat(num1,2))num2 := 5.335fmt.Println("num2:",num2)fmt.Println("res2:",FormatFloat(num2,2))num3 := 5.336fmt.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 小数操作之判断几位小数点与四舍五入的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/787288

相关文章

python判断文件是否存在常用的几种方式

《python判断文件是否存在常用的几种方式》在Python中我们在读写文件之前,首先要做的事情就是判断文件是否存在,否则很容易发生错误的情况,:本文主要介绍python判断文件是否存在常用的几种... 目录1. 使用 os.path.exists()2. 使用 os.path.isfile()3. 使用

SQL中JOIN操作的条件使用总结与实践

《SQL中JOIN操作的条件使用总结与实践》在SQL查询中,JOIN操作是多表关联的核心工具,本文将从原理,场景和最佳实践三个方面总结JOIN条件的使用规则,希望可以帮助开发者精准控制查询逻辑... 目录一、ON与WHERE的本质区别二、场景化条件使用规则三、最佳实践建议1.优先使用ON条件2.WHERE用

Linux链表操作方式

《Linux链表操作方式》:本文主要介绍Linux链表操作方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、链表基础概念与内核链表优势二、内核链表结构与宏解析三、内核链表的优点四、用户态链表示例五、双向循环链表在内核中的实现优势六、典型应用场景七、调试技巧与

Go语言如何判断两张图片的相似度

《Go语言如何判断两张图片的相似度》这篇文章主要为大家详细介绍了Go语言如何中实现判断两张图片的相似度的两种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 在介绍技术细节前,我们先来看看图片对比在哪些场景下可以用得到:图片去重:自动删除重复图片,为存储空间"瘦身"。想象你是一个

Java Multimap实现类与操作的具体示例

《JavaMultimap实现类与操作的具体示例》Multimap出现在Google的Guava库中,它为Java提供了更加灵活的集合操作,:本文主要介绍JavaMultimap实现类与操作的... 目录一、Multimap 概述Multimap 主要特点:二、Multimap 实现类1. ListMult

Golang 日志处理和正则处理的操作方法

《Golang日志处理和正则处理的操作方法》:本文主要介绍Golang日志处理和正则处理的操作方法,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考... 目录1、logx日志处理1.1、logx简介1.2、日志初始化与配置1.3、常用方法1.4、配合defer

Python中文件读取操作漏洞深度解析与防护指南

《Python中文件读取操作漏洞深度解析与防护指南》在Web应用开发中,文件操作是最基础也最危险的功能之一,这篇文章将全面剖析Python环境中常见的文件读取漏洞类型,成因及防护方案,感兴趣的小伙伴可... 目录引言一、静态资源处理中的路径穿越漏洞1.1 典型漏洞场景1.2 os.path.join()的陷

Python使用Code2flow将代码转化为流程图的操作教程

《Python使用Code2flow将代码转化为流程图的操作教程》Code2flow是一款开源工具,能够将代码自动转换为流程图,该工具对于代码审查、调试和理解大型代码库非常有用,在这篇博客中,我们将深... 目录引言1nVflRA、为什么选择 Code2flow?2、安装 Code2flow3、基本功能演示

Python中OpenCV与Matplotlib的图像操作入门指南

《Python中OpenCV与Matplotlib的图像操作入门指南》:本文主要介绍Python中OpenCV与Matplotlib的图像操作指南,本文通过实例代码给大家介绍的非常详细,对大家的学... 目录一、环境准备二、图像的基本操作1. 图像读取、显示与保存 使用OpenCV操作2. 像素级操作3.

python操作redis基础

《python操作redis基础》Redis(RemoteDictionaryServer)是一个开源的、基于内存的键值对(Key-Value)存储系统,它通常用作数据库、缓存和消息代理,这篇文章... 目录1. Redis 简介2. 前提条件3. 安装 python Redis 客户端库4. 连接到 Re