Reputation: 21
I'm working with math/big
.
I was wondering if somebody knows a short way to convert a string
of digits like "2023930943509509"
to a big.Rat
type value.
I know .SetString()
can be used for big.Int
types, but can the same be done for the Rat
type?
Upvotes: 1
Views: 1133
Reputation: 417777
You don't have to learn these methods and functions by heart, whenever you look for something, check the package documentation. The doc of the package in question can be found here: math/big
.
As you can see in the doc, there is a Rat.SetString()
method for the big.Rat
type too which you can use for this purpose:
func (z *Rat) SetString(s string) (*Rat, bool)
SetString sets z to the value of s and returns z and a boolean indicating success. s can be given as a fraction "a/b" or as a floating-point number optionally followed by an exponent. The entire string (not just a prefix) must be valid for success. If the operation failed, the value of z is un- defined but the returned value is nil.
Example using it:
r := big.NewRat(1, 1)
if _, ok := r.SetString("2023930943509509"); !ok {
fmt.Println("Failed to parse the string!")
}
fmt.Println(r)
fmt.Println(r.FloatString(2))
Output (try it on the Go Playground):
2023930943509509/1
2023930943509509.00
Upvotes: 3