diff --git a/horse/skill.go b/horse/skill.go index 10ee287..447fbb0 100644 --- a/horse/skill.go +++ b/horse/skill.go @@ -1,6 +1,10 @@ package horse -import "strconv" +import ( + "bytes" + "fmt" + "strconv" +) type SkillID int32 @@ -9,11 +13,14 @@ type TenThousandths int32 func (x TenThousandths) String() string { b := make([]byte, 0, 12) b = strconv.AppendInt(b, int64(x/1e4), 10) - b = append(b, '.') - if x < 0 { - x = -x + if x%1e4 != 0 { + if x < 0 { + x = -x + } + b = append(b, '.') + b = fmt.Appendf(b, "%04d", x%1e4) + b = bytes.TrimRight(b, "0") } - b = strconv.AppendInt(b, int64(x%1e4), 10) return string(b) } diff --git a/horse/skill_test.go b/horse/skill_test.go index b8e0507..61129d3 100644 --- a/horse/skill_test.go +++ b/horse/skill_test.go @@ -32,3 +32,25 @@ func TestSkillStrings(t *testing.T) { } } } + +func TestTenThousandthsString(t *testing.T) { + t.Parallel() + cases := []struct { + val horse.TenThousandths + want string + }{ + {0, "0"}, + {10000, "1"}, + {-10000, "-1"}, + {15000, "1.5"}, + {-15000, "-1.5"}, + {10001, "1.0001"}, + {5000000, "500"}, + } + for _, c := range cases { + got := c.val.String() + if got != c.want { + t.Errorf("%d: want %q, got %q", c.val, c.want, got) + } + } +}