diff --git a/src/number.go b/src/number.go index 2141e4c..a932068 100644 --- a/src/number.go +++ b/src/number.go @@ -3,14 +3,12 @@ package main import ( "fmt" "math/big" + "strings" ) // a number type type number = *big.Rat -// create a number from two integers -var createNumber = big.NewRat - // create a new number type func newNumber() *big.Rat { return new(big.Rat) @@ -22,10 +20,55 @@ func stringToNumber(str string) (*big.Rat, bool) { } // converts a number type to a string -func numberToString(num number, fraction bool) string { - if fraction { - return num.RatString() +func numberToString(num number, fraction int) string { + if fraction != 0 { + str := num.RatString() + if fraction == 1 { + return str + } + split := strings.SplitN(str, "/", 2) + if len(str) == 1 { + return split[0] + } + numerator := split[0] + denominator := split[1] + + super := []string{} + for i := 0; i < len(numerator); i++ { + super = append(super, superscript[numerator[i]]) + } + sub := []string{} + for i := 0; i < len(denominator); i++ { + sub = append(sub, subscript[denominator[i]]) + } + return strings.Join(super, "") + "/" + strings.Join(sub, "") } x, _ := num.Float64() return fmt.Sprint(x) } + +var superscript = map[byte]string{ + '0': "⁰", + '1': "¹", + '2': "²", + '3': "³", + '4': "⁴", + '5': "⁵", + '6': "⁶", + '7': "⁷", + '8': "⁸", + '9': "⁹", +} + +var subscript = map[byte]string{ + '0': "₀", + '1': "₁", + '2': "₂", + '3': "₃", + '4': "₄", + '5': "₅", + '6': "₆", + '7': "₇", + '8': "₈", + '9': "₉", +} diff --git a/src/translate.go b/src/translate.go index b218e01..5c4166e 100644 --- a/src/translate.go +++ b/src/translate.go @@ -5,12 +5,6 @@ import ( ) func translate(code string) { - a := createNumber(7, 1) - b, worked := stringToNumber("1e-1") - if worked { - output := newNumber().Mul(a, b) - output.Add(output, a) - output.Sub(output, a) - fmt.Println(numberToString(output, true)) - } + output, _ := newNumber().SetString("3.1415") + fmt.Println(numberToString(output, 0)) }