Steven D'Aprano wrote: > I have a sinking feeling I'm missing something really, > really simple. > > I'm looking for a format string similar to '%.3f' > except that trailing zeroes are not included. > > To give some examples: > > Float String > 1.0 1 > 1.1 1.1 > 12.1234 12.123 > 12.0001 12 > > and similar. > > Here is a (quick and dirty) reference implementation: > > def format(f, width=3): > fs = '%%.%df' % width > s = fs % f > return s.rstrip('0').rstrip('.') > > > Is there a way of getting the same result with just a > single string format expression?
Does it have to be a string or can you cheat? If so: >>> class Format(str): ... def __new__(cls, width): ... return str.__new__(cls, "%%.%df" % width) ... def __mod__(self, other): ... return str.__mod__(self, other).rstrip("0").rstrip(".") ... >>> format = Format(3) >>> for f in [1.0, 1.1, 12.1234, 12.0001]: ... print f, "-->", format % f ... 1.0 --> 1 1.1 --> 1.1 12.1234 --> 12.123 12.0001 --> 12 For passing around in your app that should be as convenient as a string -- of course it will break if you store the "format" in a file, say. Peter -- http://mail.python.org/mailman/listinfo/python-list