]> Cypherpunks repositories - gostls13.git/commitdiff
big: added RatString, some simplifications
authorRobert Griesemer <gri@golang.org>
Tue, 31 Aug 2010 22:18:46 +0000 (15:18 -0700)
committerRobert Griesemer <gri@golang.org>
Tue, 31 Aug 2010 22:18:46 +0000 (15:18 -0700)
R=rsc
CC=golang-dev
https://golang.org/cl/2095041

src/pkg/big/rat.go
src/pkg/big/rat_test.go

index d8d6dc4beed68f4fd7ac2587a29053b13fc0354f..22ae8d2d8b4ea34908abf37cfdd9e7940fcce591 100644 (file)
@@ -269,29 +269,34 @@ func (z *Rat) SetString(s string) (*Rat, bool) {
 }
 
 
-// String returns a string representation of z in the form "a/b".
+// String returns a string representation of z in the form "a/b" (even if b == 1).
 func (z *Rat) String() string {
-       s := z.a.String()
-       if len(z.b) == 1 && z.b[0] == 1 {
-               return s
+       return z.a.String() + "/" + z.b.string(10)
+}
+
+
+// RatString returns a string representation of z in the form "a/b" if b != 1,
+// and in the form "a" if b == 1.
+func (z *Rat) RatString() string {
+       if z.IsInt() {
+               return z.a.String()
        }
-       return s + "/" + z.b.string(10)
+       return z.String()
 }
 
 
 // FloatString returns a string representation of z in decimal form with prec
 // digits of precision after the decimal point and the last digit rounded.
 func (z *Rat) FloatString(prec int) string {
+       if z.IsInt() {
+               return z.a.String()
+       }
+
        q, r := nat{}.div(nat{}, z.a.abs, z.b)
 
-       s := ""
+       s := q.string(10)
        if z.a.neg {
-               s = "-"
-       }
-       s += q.string(10)
-
-       if len(z.b) == 1 && z.b[0] == 1 {
-               return s
+               s = "-" + s
        }
 
        p := nat{}.expNN(natTen, nat{Word(prec)}, nil)
index a3793b2e8134f1e32460bbe942d4ef9081c6106f..ccc9cf60563ea8a03b23040de6d4d2b84ad7f34a 100644 (file)
@@ -48,8 +48,8 @@ func TestRatSetString(t *testing.T) {
        for i, test := range setStringTests {
                x, ok := new(Rat).SetString(test.in)
 
-               if ok != test.ok || ok && x.String() != test.out {
-                       t.Errorf("#%d got %s want %s", i, x.String(), test.out)
+               if ok != test.ok || ok && x.RatString() != test.out {
+                       t.Errorf("#%d got %s want %s", i, x.RatString(), test.out)
                }
        }
 }