Golang处理小数四舍五入与不进行四舍五入的用法
package scripts_stroage import ( "fmt" "github.com/shopspring/decimal" "strconv" "testing" ) // 保留2位小数 —— 带四舍五入 func TestT81(t *testing.T) { var userCoin int = 5678 cashOrigin := float64(userCoin) / 10000 fmt.Println("cashOrigin: ", cashOrigin) // 0.5678 // TODO 这里四舍五入了!!! cashOriginStr := fmt.Sprintf("%.2f", cashOrigin) fmt.Println("cashOriginStr: ", cashOriginStr) cash, _ := strconv.ParseFloat(fmt.Sprintf("%.2f", cashOrigin), 64) fmt.Println("cash: ", cash) // 0.57 } // 保留2位小数 —— 不带四舍五入 func Test82(t *testing.T) { var userCoin int = 5678 cashOrigin := float64(userCoin) / 10000 fmt.Println("cashOrigin: ", cashOrigin) // 0.5678 // 小数点后2位,RoundFloor不四舍五入~向上取整~~ Round方法四舍五入~~RoundUp方法不管面是否大于等于5都往前进一位~ cash, _ := decimal.NewFromFloat(cashOrigin).RoundFloor(2).Float64() fmt.Println("cash: ", cash) // 0.56 }
~~~
package scripts_stroage import ( "fmt" "github.com/shopspring/decimal" "strconv" "testing" ) // 资源A(int):容易获取、数值比较大、不可交易 // 资源B(float64):不容易获取、数值比较小、可交易~ 买一些高级别的游戏内物品~ // 资源A可以通过一定的汇率转换为资源B~ // 资源A转换为资源B的时候就会遇到四舍五入的问题~ const cashRatio = 10000 func TestT81(t *testing.T) { a := 5678 // TODO 四舍五入的写法 originB := float64(a) / cashRatio fmt.Println("originB: ", originB) // originB: 0.5678 // 只转小数点后2为,剩余位数忽略 originBStr := fmt.Sprintf("%.2f", originB) fmt.Printf("originBStr: %v, %T \n", originBStr, originBStr) // originBStr: 0.57, string ret, _ := strconv.ParseFloat(originBStr, 64) fmt.Printf("ret: %v, %T \n", ret, ret) // ret: 0.57, float64 } func TestT82(t *testing.T) { a := 5678 // github.com/shopspring/decimal originB := float64(a) / cashRatio // originB: 0.5678 fmt.Println("originB: ", originB) // TODO 不四舍五入 cashRet, _ := decimal.NewFromFloat(originB).RoundFloor(3).Float64() fmt.Printf("ret: %v, %T \n", cashRet, cashRet) // ret: 0.567, float64 }
~~~
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通