Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

simple string format question

57 views
Skip to first unread message

Neal Becker

unread,
Oct 15, 2012, 8:12:31 AM10/15/12
to pytho...@python.org
Is there a way to specify to format I want a floating point written with no more
than e.g., 2 digits after the decimal? I tried {:.2f}, but then I get all
floats written with 2 digits, even if they are 0:

2.35 << yes, that's what I want
2.00 << no, I want just 2 or 2.

Chris Rebert

unread,
Oct 15, 2012, 8:29:59 AM10/15/12
to Neal Becker, pytho...@python.org
Not that I can find. Seems you'll have to implement it yourself.


In the event that your project uses Django, there happens to be a
template tag for this (pass it -2 in your case):
https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#floatformat

Cheers,
Chris

Adrien

unread,
Oct 15, 2012, 8:58:09 AM10/15/12
to pytho...@python.org
Le 15/10/2012 14:12, Neal Becker a écrit :
> Is there a way to specify to format I want a floating point written with no more
> than e.g., 2 digits after the decimal? I tried {:.2f}, but then I get all
> floats written with 2 digits, even if they are 0:
>
> 2.35 << yes, that's what I want
> 2.00 << no, I want just 2 or 2.

Maybe you're looking for "{:.3g}"

print "{:.3g}".format(2)
# '2'

print "{:.3g}".format(2.00)
# '2'

print "{:.3g}".format(2.35)
# '2.35'

print "{:.3g}".format(2.356) # this rounds up
# '2.36'

Cheers,

-- Adrien

Dave Angel

unread,
Oct 15, 2012, 9:02:58 AM10/15/12
to Neal Becker, pytho...@python.org
On 10/15/2012 08:29 AM, Chris Rebert wrote:
> On Mon, Oct 15, 2012 at 5:12 AM, Neal Becker <ndbe...@gmail.com> wrote:
>> Is there a way to specify to format I want a floating point written with no more
>> than e.g., 2 digits after the decimal? I tried {:.2f}, but then I get all
>> floats written with 2 digits, even if they are 0:
>>
>> 2.35 << yes, that's what I want
>> 2.00 << no, I want just 2 or 2.
> Not that I can find. Seems you'll have to implement it yourself.

To do it yourself, probably best to use a temp string value, created by
format "{: f}". (Notice the space before the f, to reserve space for
the sign) Then, slice that value to length 4 . Finally, in your actual
format, use :5s for a format. This should add the blanks for padding,
so other columns still line up.

>
> In the event that your project uses Django, there happens to be a
> template tag for this (pass it -2 in your case):
> https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#floatformat
>
> Cheers,
> Chris


--

DaveA

Piet van Oostrum

unread,
Oct 24, 2012, 11:48:02 PM10/24/12
to
Adrien <adno...@gmail.com> writes:

> print "{:.3g}".format(2.356) # this rounds up

But:

>>> print "{:.3g}".format(12.356)
12.4
>>> print "{:.3g}".format(123.356)
123

--
Piet van Oostrum <pi...@vanoostrum.org>
WWW: http://pietvanoostrum.com/
PGP key: [8DAE142BE17999C4]

Neil Cerutti

unread,
Oct 25, 2012, 8:49:20 AM10/25/12
to
On 2012-10-25, Piet van Oostrum <pi...@vanoostrum.org> wrote:
> Adrien <adno...@gmail.com> writes:
>
>> print "{:.3g}".format(2.356) # this rounds up
>
> But:
>
>>>> print "{:.3g}".format(12.356)
> 12.4
>>>> print "{:.3g}".format(123.356)
> 123


The precision is a decimal number indicating how many digits
should be displayed after the decimal point for a floating
point value formatted with 'f' and 'F', or before and after the
decimal point for a floating point value formatted with 'g' or
'G'. For non-number types the field indicates the maximum field
size - in other words, how many characters will be used from
the field content. The precision is not allowed for integer
values.

So g will print a specific number of significant digits, so it
won't do what Adrien wants.

And f will print a fixed number of digits after the decimal
point, so it won't do want Adrien wants.

Adrien, you will need to do some post-processing on fixed point
output to remove trailing zeroes.

>>> print("{:.2f}".format(2.1).rstrip('0'))
2.1
>>> print("{:.2f}".format(2.127).rstrip('0'))
2.13

--
Neil Cerutti
0 new messages