当前位置: 首页 > web >正文

go封装将所有数字类型转浮点型,可设置保留几位小数

封装转换方法

/*
*
* 将类型转浮点型,并保留小数
ToFloat(123, 2)
ToFloat(3.5254, 0)
*/
func ToFloat(value interface{}, precision int) (float64, error) {var f float64var err errorswitch v := value.(type) {case float64:f = vcase float32:f = float64(v)case int:f = float64(v)case int32:f = float64(v)case int64:f = float64(v)case uint:f = float64(v)case uint64:f = float64(v)case string:f, err = strconv.ParseFloat(v, 64)if err != nil {return 0, fmt.Errorf("无法将字符串转换为浮点数: %v", err)}case bool:if v {f = 1} else {f = 0}default:return 0, fmt.Errorf("不支持的类型: %T", v)}// 处理精度if precision >= 0 {shift := math.Pow(10, float64(precision))f = math.Round(f*shift) / shift}return f, nil
}

使用

if m["state"] != nil && m["state"] != "" {state, _ := ToFloat(m["state"], 0)if state == 1 {where = fmt.Sprintf("%s and b.status='%s'", where, "1")}if state == 2 {where = fmt.Sprintf("%s and b.status='%s'", where, "2")}
}

使用

package mainimport ("fmt""utils"
)func main() {// 示例 1: 转换整数并保留2位小数result, _ := utils.ToFloat(123, 2)fmt.Println(result) // 输出: 123.00// 示例 2: 转换字符串并保留3位小数result, _ = utils.ToFloat("3.14159", 3)fmt.Println(result) // 输出: 3.142 (四舍五入)// 示例 3: 转换布尔值result, _ = utils.ToFloat(true, 0)fmt.Println(result) // 输出: 1// 示例 4: 转换失败时返回默认值result = utils.ToFloatWithDefault("abc", 2, 0.0)fmt.Println(result) // 输出: 0
}

封装

package taskimport ("fmt""math""strconv"
)/*
将类型转浮点型,并保留小数
ToFloat(123, 2)
ToFloat(3.5254, 0)
*/
func ToFloat(value interface{}, precision int) (float64, error) {var f float64var err errorswitch v := value.(type) {case float64:f = vcase float32:f = float64(v)case int:f = float64(v)case int32:f = float64(v)case int64:f = float64(v)case uint:f = float64(v)case uint64:f = float64(v)case string:f, err = strconv.ParseFloat(v, 64)if err != nil {return 0, fmt.Errorf("无法将字符串转换为浮点数: %v", err)}case bool:if v {f = 1} else {f = 0}default:return 0, fmt.Errorf("不支持的类型: %T", v)}// 处理精度if precision >= 0 {shift := math.Pow(10, float64(precision))f = math.Round(f*shift) / shift}return f, nil
}
http://www.xdnf.cn/news/6652.html

相关文章:

  • AG-UI 协议:重构多模态交互,开启智能应用新纪元
  • C42-作业练习
  • 光谱相机的空间分辨率和时间分辨率
  • MinIO 开源的分布式文件服务器
  • 三格电子上新了——IO-Link系列集线器
  • 【C++】 —— 笔试刷题day_29
  • el-breadcrumb 面包屑第一项后面怎么写没有分隔符
  • 【实测有效】Edge浏览器打开部分pdf文件显示空白
  • 线程池(ThreadPoolExecutor)实现原理和源码细节是Java高并发面试和实战开发的重点
  • 文件系统交互实现
  • css:无限滚动波浪线
  • Linux du 命令终极指南:从基础到精通
  • 详解具身智能开源数据集:RH20T
  • Maven使用详解:Maven的概述(二)
  • 单片机-STM32部分:18、WiFi模组
  • 真题卷001——算法备赛
  • 小结:JavaScript 模块化工具链
  • 傅里叶变换实战:图像去噪与边缘提取
  • 锚点跳转跟踪#
  • Web-CSS入门
  • ci/cd全流程实操
  • 2025年全国青少年信息素养大赛复赛集训(2):寻找250(题目及解析)
  • Perl测试起步:从零到精通的完整指南
  • 【Python】【OCR识别】 提取图片文字并根据内容智能分类存储
  • C#运算符
  • 大语言模型与多模态模型比较
  • 【笔记】cri-docker.service和containerd
  • 特斯拉虚拟电厂:能源互联网时代的分布式革命
  • [IMX] 01.IVT 表长度计算
  • 考研408《计算机组成原理》复习笔记,第二章(2)数值数据的表示(浮点数篇)