mirror of
https://github.com/charlienet/go-mixed.git
synced 2025-07-17 16:12:42 +08:00
fen and yuan
This commit is contained in:
@ -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()
|
||||||
|
}
|
||||||
|
@ -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)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
Reference in New Issue
Block a user