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 }
~~~