Skip to content

trim trailing 0s #151

Open
Open

Description

@zeitlinger

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)

Activity

  1. bojanz commented on May 15, 2020

    @bojanz

    Maybe you could copy some code from my formatter: https://github.com/bojanz/currency/blob/master/formatter.go

  2. zeitlinger commented on May 15, 2020

    @zeitlinger
    Author

    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:

    1. I have a working solution for both problems - which I included in the description
    2. I'm wondering if the library already supports it - and I just didn't understand it
  3. bojanz commented on May 15, 2020

    @bojanz

    Apologies, I read your issue in a hurry and thought you were looking for a better formatting helper.

  4. ericlagergren commented on May 16, 2020

    @ericlagergren
    Owner

    Just for string formatting? You can use the width verbs. Quantize does what you want too, but modifies the receiver.

  5. zeitlinger commented on May 18, 2020

    @zeitlinger
    Author

    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
    }
  6. lotodore commented on Sep 28, 2022

    @lotodore
    Contributor

    @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"?

  7. ericlagergren commented on Oct 6, 2022

    @ericlagergren
    Owner

    @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.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions