trim trailing 0s
Is there a way to trim trailing 0s like the following?
s := d.String()
if strings.Contains(s, ".") {
s = strings.TrimRight(strings.TrimRight(s, "0"), ".")
}
Is there a way to format a number with a given number of digits after the "." - something easier than this
str := fmt.Sprintf("%f", d)
i := strings.Index(strings.TrimLeft(str, "-"), ".")
if i < 0 {
i = len(str)
}
r := p.Round(i + int(precision))
format := "%." + strconv.Itoa(int(precision)) + "f%%"
return fmt.Sprintf(format, r)
Maybe you could copy some code from my formatter: https://github.com/bojanz/currency/blob/master/formatter.go
Maybe you could copy some code from my formatter: https://github.com/bojanz/currency/blob/master/formatter.go
I'm afraid I don't understand it.
What I'm trying to say:
- I have a working solution for both problems - which I included in the description
- I'm wondering if the library already supports it - and I just didn't understand it
Apologies, I read your issue in a hurry and thought you were looking for a better formatting helper.
Just for string formatting? You can use the width verbs. Quantize does what you want too, but modifies the receiver.
ah, this is for the second use case - and works sometimes, but not always
func TestAsPercentageWithPrecision(t *testing.T) {
assert.Equal(t, "100.00", withPrecision("99.999999", 2)) //fails because it's "100.0"
}
func withPrecision(s string, precision uint) string {
f := parse(s)
return fmt.Sprintf("%s", f.Quantize(int(precision)))
}
func parse(s string) *decimal.Big {
p, _ := new(decimal.Big).SetString(s)
return p
}
@zeitlinger Call Quantize twice as a workaround, this will lead to 100.00 (and also works if precision is 0)
Looking at the date of this issue... Is this library still supported, or "kind of archived"?
@lotodore I just haven't had a lot of time to work on it lately. But I will always make time to review and accept PRs.