随笔 - 231  文章 - 205  评论 - 20  阅读 - 41万

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
}
复制代码

~~~

posted on   江湖乄夜雨  阅读(3981)  评论(1编辑  收藏  举报
相关博文:
阅读排行:
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

点击右上角即可分享
微信分享提示