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

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.lryc.cn/news/2380433.html

相关文章:

  • Rust 学习笔记:关于 Vector 的练习题
  • Linux 系统异常触发后自动重启配置指南
  • apisix透传客户端真实IP(real-ip插件)
  • Oracle 数据库的默认隔离级别
  • 统计客户端使用情况,使用es存储数据,实现去重以及计数
  • 代码随想录算法训练营第六十四天| 图论9—卡码网47. 参加科学大会,94. 城市间货物运输 I
  • oracle序列自增问题
  • 开启健康生活的多元养生之道
  • 【Vite】前端开发服务器的配置
  • 鸿蒙OSUniApp 制作自定义弹窗与模态框组件#三方框架 #Uniapp
  • Spring Security与Spring Boot集成原理
  • VScode各文件转化为PDF的方法
  • 精益数据分析(58/126):移情阶段的深度实践与客户访谈方法论
  • Vue3学习(组合式API——Watch侦听器、watchEffect()详解)
  • 【node.js】安装与配置
  • 《AI大模型应知应会100篇》第62篇:TypeChat——类型安全的大模型编程框架
  • HttpMessageConverter 的作用是什么? 它是如何实现请求体到对象、对象到响应体的自动转换的(特别是 JSON/XML)?
  • EdgeShard:通过协作边缘计算实现高效的 LLM 推理
  • 火山 RTC 引擎9 ----集成 appkey
  • ArcGIS Pro 3.4 二次开发 - 框架
  • Adminer:一个基于Web的轻量级数据库管理工具
  • RK3568下QT实现按钮切换tabWidget
  • 2025 OceanBase 开发者大会全议程指南
  • GitHub 趋势日报 (2025年05月15日)
  • day017-磁盘管理-实战
  • 【成品设计】STM32和UCOS-II的项目
  • 当通过PHP在线修改文件数组遇到不能及时生效问题
  • Ngrok 配置:实现 Uniapp 前后端项目内网穿透
  • 鸿蒙ArkUI体验:Hexo博客客户端开发心得
  • 鸿蒙NEXT开发动画案例10