Python format function: 1 decimal place [duplicate] - python

This question already has answers here:
How can I format a decimal to always show 2 decimal places?
(13 answers)
Closed 5 years ago.
I have the following:
'{0:n}'.format(0/10.0)
which evaluates to
0
I want it to evaluate to
0.0
That is, there should always be 1 decimal place. What is the correct format for this?
Thanks.

print('{0:3.1f}'.format(0/10.0)) # '0.0'
f for fixed-point notation; 3 for the total number of places to be reserved for the whole string, 1 for the decimal places.
if your number is too big to fit into the 3 reserved spaces, the string will use more space:
print('{0:3.1f}'.format(10.0)) # '10.0'; 4 places
with a more recent python version you can use f-strings (i put the value in a variable for more legibility)
x= 0/10.0
print('f{x:3.1f}')

In [24]: "{0:.1f}".format(0)
Out[24]: '0.0'

If you change the data to float you the decimal .
a= 1.0 # "a" is a float
a= 1 # "a" is now a integer
try that :)

Related

how to print a float to 2 decimal places [duplicate]

This question already has answers here:
How to display a float with two decimal places?
(13 answers)
Closed 3 years ago.
I want number from input to print out with 2 decimal places. You can assume that the number will always be a float.
num = 20.0
Desired output - 20.00.
I've tried this code:
num = round(num, 2)
num = float('{0.2f}'.format(num))
print(num)
This should work
print('{0.2f}'.format(num))
When you turn this string back into a float with float() the formatting is lost.
No matter what you do to the float value, as long as it is still a float, it does not have any internal concept of decimal places.
If you want to display two decimal places, then that happens when you convert to text - which everything you print is, whether you asked for the conversion or not. You cannot make num "be" 20.00 as opposed to 20.0, because those aren't actually different things. (And keep in mind that the float simply cannot represent all decimal values exactly.)
Therefore, we use string formatting in the print call:
num = 20.0
print('{.2f}'.format(num))
# Or, using f-strings:
print(f'{num:.2f}')

Add two Float values and get up to 2 precision values [duplicate]

This question already has answers here:
How to print float to n decimal places including trailing 0s?
(5 answers)
Closed 5 years ago.
Can we get up to 2 precision values when we add 2 float values of containing 0 as 2nd precision without changing its type as Float
I have a snippet like
a = 1.20+1.20
print a
the output should be like
2.40
but I got the output as 2.4 because python rounds off
I've tried like this ,
from decimal import *
getcontext().prec = 3
Decimal(1.20)+Decimal(1.20)
Decimal('2.40')
But every time I need to change the precision value!
can we get as 2.40 without changing its type?
It should contain a float value as 2.40, not a string!
Yes! you can round a float number.
>>> round(2.675, 2)
2.67
You can see more details in python's documentation

When Rounding to nearest hundreds, how do I include 0s [duplicate]

This question already has answers here:
Rounding a number in Python but keeping ending zeros
(6 answers)
Closed 6 years ago.
So let's say I have this code:
num = 1.29283
round(num, 2)
That rounds to 1.29, but if I do this:
num = 1.30293
round(num, 2)
That rounds to 1.3. I want to know if there is a way to have it round to 1.30; I know it is the same number, but I need it to print 1.30.
You can use string formatting for this. A number in python does not have such a thing as trailing zeros. So your question only make sense for strings.
Example:
>>> num = 1.30293
>>> "{:.2f}".format(num)
'1.30'
The .2f says that this is a float (f) and that you want two digits after the point .2. Read more about string formatting here

How can I stop printing a float 3 spaces after decimal? [duplicate]

This question already has answers here:
How to display a float with two decimal places?
(13 answers)
Pad python floats
(4 answers)
Closed 8 years ago.
I'm sorry, I know this must be a duplicate, I can't find where else it's posted. Please feel free to link me to the original question and mark this as duplicate.
I would like to print a 3 digits of a number AFTER the decimal point in it.
For example:
number = 523.637382
I would like to print: 523.637
I have a feeling I can use something similar to this
print(str(number)[:7])
>>>523.637
However, this will not work if the number before the decimal is not 3 decimals.
Bonus points:
Would this be easy?
number = 500.220
#magic
>>>500.22
number = 500.2000003
#magic
>>>500.2
A (built-in) function that could do this is round:
>>> number = 523.637382
>>> rounded = round(number, 3) # 3 decimal places, for example
>>> rounded
523.637
This has already been answered for example here.
The good news, to answer the second part of your question, is that the round function automatically removes trailing zeroes. It's much harder to retain the zeros if you're defining a new variable: you need the decimal module; but it looks that that isn't necessary here.
>>> number = 523.60000001
>>> rounded = round(number, 3)
>>> rounded
523.6
print("%.3f" % number)
or, using the new-style formatting,
print("{0:.3f}".format(number))
If you're printing a str like above you can use string interpolation:
number = 33.33333
print("{0:.3f}".format(number))
#=> 33.333

python round leaving a trailing 0 [duplicate]

This question already has answers here:
Most Pythonic way to print *at most* some number of decimal places [duplicate]
(3 answers)
Closed 9 years ago.
I am trying to round a floating point number in python to zero decimal places.
However, the round method is leaving a trailing 0 every time.
value = 10.01
rounded_value = round(value)
print rounded_value
results in 10.0 but I want 10
How can this be achieved? Converting to an int?
Pass the rounded value to int() to get rid of decimal digits:
>>> value = 10.01
>>> int(round(value))
10
>>> value = 10.55
>>> int(round(value))
11
10.0 and 10 are the same float value. When you print that value, you get the string 10.0, because that's the default string representation of the value. (The same string you get by calling str(10.0).)
If you want a non-default representation, you need to ask for it explicitly. For example, using the format function:
print format(rounded_value, '.0f')
Or, using the other formatting methods:
print '{:.0f}'.format(rounded_value)
print '%.0f' % (rounded_value,)
The full details for why you want '.0f' are described in the Format Specification Mini-Language, but intuitively: the f means you want fixed-point format (like 10.0 instead of, say, 1.0E2), and the .0 means you want no digits after the decimal point (like 10 instead of 10.0).
Meanwhile, if the only reason you rounded the value was for formatting… never do that. Leave the precision on the float, then trim it down in the formatting:
print format(value, '.0f')
Casting to an int would certainly be the easiest way. If you are hell-bent on keeping it a float here's how to do it courtesy of Alex Martelli:
print ('%f' % value).rstrip('0').rstrip('.')
You'll find a function number_shaver() that cuts trailing zeros of numbers in the EDIT 2 of this post.
Another post in the same thread explains how the regex in number_shaver() works.
I improved the regex in another thread some days later.

Categories