package main import ( "fmt" "math" "testing" "github.com/shopspring/decimal" ) func Test111(t *testing.T) { amount, _ := decimal.NewFromString("327312.6934") amountFlo := amount.IntPart() t.Log(amountFlo) count := int(amountFlo)/100000 + 1 total := 0 for i := 1; i < count; i++ { total = total + 100000 } t.Log(total) } func Test222(t *testing.T) { amount, _ := decimal.NewFromString("300000.2934") invoicePart := int(math.Ceil(amount.InexactFloat64() / 100000)) t.Log(invoicePart) } func Test333(t *testing.T) { amount, _ := decimal.NewFromString("-290.83") t.Log(amount) t.Log(amount.Neg()) amount2, _ := decimal.NewFromString("290.83") t.Log(amount2) t.Log(amount2.Neg()) } func Test444(t *testing.T) { amount, _ := decimal.NewFromString("300000.2934") t.Log(amount.RoundDown(2)) t.Log(amount.RoundDown(2).StringFixed(2)) amount1, _ := decimal.NewFromString("300000.2") t.Log(amount1.RoundDown(2)) t.Log(amount1.RoundDown(2).StringFixed(2)) amount2, _ := decimal.NewFromString("300000.297") t.Log(amount2.RoundDown(2)) t.Log(amount2.RoundDown(2).StringFixed(2)) amount3, _ := decimal.NewFromString("300000") t.Log(amount3.RoundDown(2)) t.Log(amount3.RoundDown(2).StringFixed(2)) amount4, _ := decimal.NewFromString("300000.2834") t.Log(amount4.RoundFloor(2)) t.Log(amount4.RoundDown(2)) t.Log(amount4.RoundUp(2)) t.Log(amount4.RoundBank(2)) t.Log(amount4.RoundCeil(2)) } func Test555(t *testing.T) { amount1, _ := decimal.NewFromString("300000.2834") max := decimal.NewFromFloat(100000) t.Log(amount1.Div(max).RoundUp(0).IntPart()) amount2, _ := decimal.NewFromString("210000.2834") t.Log(amount2.Div(max).RoundUp(0).IntPart()) amount3, _ := decimal.NewFromString("200000") t.Log(amount3.Div(max).RoundUp(0).IntPart()) } func Test666(t *testing.T) { t.Log(decimal.NewFromInt(30).Mul(decimal.NewFromFloat(0.01)).StringFixed(2)) } func Test_New(t *testing.T) { amount1, _ := decimal.NewFromString("300012.2834") t.Log(amount1) t.Log(amount1.String()) t.Log(amount1.IntPart()) //获取整数部分 t.Log(amount1.InexactFloat64()) fmt.Println() amount2 := decimal.NewFromFloat(300012.2834) t.Log(amount2) t.Log(amount2.String()) fmt.Println() amount3 := decimal.NewFromInt(300012) t.Log(amount3) t.Log(amount3.String()) t.Log(amount3.InexactFloat64()) } func Test_StringFixed(t *testing.T) { amount1, _ := decimal.NewFromString("300012.2834") t.Log(amount1.StringFixed(4)) // 300012.2834 amount2, _ := decimal.NewFromString("300012.2834") t.Log(amount2.StringFixed(3)) // 300012.283 amount3, _ := decimal.NewFromString("300012.2834") t.Log(amount3.StringFixed(2)) // 300012.28 amount4, _ := decimal.NewFromString("300012.2834") t.Log(amount4.StringFixed(1)) // 300012.3 amount5, _ := decimal.NewFromString("300012.2834") t.Log(amount5.StringFixed(0)) // 300012 amount6, _ := decimal.NewFromString("300012.2834") t.Log(amount6.StringFixed(-1)) // 300010 } func Test_Round(t *testing.T) { amount1, _ := decimal.NewFromString("300000.2834") t.Log(amount1.Round(2).StringFixed(2)) // 300000.28 amount2, _ := decimal.NewFromString("300000.2864") t.Log(amount2.Round(2).StringFixed(2)) // 00000.29 amount3, _ := decimal.NewFromString("300000.2") t.Log(amount3.Round(2).StringFixed(2)) // 300000.20 amount4, _ := decimal.NewFromString("300000") t.Log(amount4.Round(2).StringFixed(2)) // 300000.00 t.Log("--- StringFixed ---") amount5, _ := decimal.NewFromString("300000.2834") t.Log(amount5.StringFixed(2)) // 300000.28 amount6, _ := decimal.NewFromString("300000.2864") t.Log(amount6.StringFixed(2)) // 300000.29 amount7, _ := decimal.NewFromString("300000.2") t.Log(amount7.StringFixed(2)) // 300000.20 amount8, _ := decimal.NewFromString("300000") t.Log(amount8.StringFixed(2)) // 300000.00 t.Log("--- Round ---") amount9, _ := decimal.NewFromString("300000.2834") t.Log(amount9.Round(2)) // 300000.28 amount10, _ := decimal.NewFromString("300000.2864") t.Log(amount10.Round(2)) // 00000.29 amount11, _ := decimal.NewFromString("300000.2") t.Log(amount11.Round(2)) // 300000.2 amount12, _ := decimal.NewFromString("300000") t.Log(amount12.Round(2)) // 300000 } func Test_RoundUp(t *testing.T) { amount1, _ := decimal.NewFromString("300000.2834") t.Log(amount1.RoundUp(2).StringFixed(2)) // 300000.29 amount2, _ := decimal.NewFromString("300000.2864") t.Log(amount2.RoundUp(2).StringFixed(2)) // 300000.29 amount3, _ := decimal.NewFromString("300000.2") t.Log(amount3.RoundUp(2).StringFixed(2)) // 300000.20 amount4, _ := decimal.NewFromString("300000") t.Log(amount4.RoundUp(2).StringFixed(2)) //300000.00 } func Test_RoundDown(t *testing.T) { amount1, _ := decimal.NewFromString("300000.2834") t.Log(amount1.RoundDown(2).StringFixed(2)) //300000.28 amount2, _ := decimal.NewFromString("300000.2864") t.Log(amount2.RoundDown(2).StringFixed(2)) //300000.28 amount3, _ := decimal.NewFromString("300000.2") t.Log(amount3.RoundDown(2).StringFixed(2)) //300000.20 amount4, _ := decimal.NewFromString("300000") t.Log(amount4.StringFixed(2)) // 300000.20 }