1
0
mirror of https://github.com/charlienet/go-mixed.git synced 2025-07-18 00:22:41 +08:00

fen and yuan

This commit is contained in:
2022-03-29 23:17:37 +08:00
parent 1c4f84d765
commit a1f37b9051
2 changed files with 56 additions and 1 deletions

View File

@ -4,6 +4,7 @@ import (
"strconv" "strconv"
"github.com/shopspring/decimal" "github.com/shopspring/decimal"
"golang.org/x/exp/constraints"
) )
// @title 分转换为元 // @title 分转换为元
@ -19,7 +20,6 @@ func CentToDollar(cent int32) string {
// 元转换为分 // 元转换为分
func DollarToCent(dollar string) int64 { func DollarToCent(dollar string) int64 {
p, _ := strconv.ParseFloat(dollar, 64) p, _ := strconv.ParseFloat(dollar, 64)
d := decimal.New(1, 2) d := decimal.New(1, 2)
@ -27,3 +27,16 @@ func DollarToCent(dollar string) int64 {
return df return df
} }
func FenToYuan[T constraints.Integer](v T) string {
d := decimal.New(1, 2)
return decimal.NewFromInt(int64(v)).DivRound(d, 2).StringFixedBank(2)
}
func YuanToFen(yuan string) int64 {
p, _ := decimal.NewFromString(yuan)
d := decimal.New(1, 2)
return p.Mul(d).IntPart()
}

View File

@ -45,3 +45,45 @@ func TestDollarToCent(t *testing.T) {
} }
} }
} }
func TestYuanToFen(t *testing.T) {
cases := []struct {
dollar string
excepted int64
}{
{"240.40", 24040},
{"999999.40", 99999940},
{"999.99", 99999},
{"0.01", 1},
{"999999.01", 99999901},
{"1000000.99", 100000099},
}
for _, c := range cases {
result := YuanToFen(c.dollar)
if result != c.excepted {
t.Fatalf("dollar to cent failed, dollar:%s execpted:%d result:%d", c.dollar, c.excepted, result)
}
}
}
func TestFenToYuan(t *testing.T) {
cases := []struct {
cent int
excepted string
}{
{24040, "240.40"},
{99999940, "999999.40"},
{99999, "999.99"},
{1, "0.01"},
{99999901, "999999.01"},
{100000099, "1000000.99"},
}
for _, c := range cases {
result := FenToYuan(c.cent)
if result != c.excepted {
t.Fatalf("dollar to cent failed, dollar:%d execpted:%s result:%s", c.cent, c.excepted, result)
}
}
}