I have Googled, but couldn't find a proper answer to this.
Let's say we have floats and we get their averages. Their averages are like this:
3.5
2.5
5
7
So we've got 4 numbers (who are not in a list anymore) . Two numbers with a decimal and two whole numbers.
What I want to do is, to print these numbers and keep them like this. My problem is, though, that when I use %.1f
, it makes 5.0 and 7.0 from 5 and 7, while I want to keep them as they are (so keep them as a whole number) .
So I'd like to print them exactly as they are, but I don't know how. Float adds decimal
points to whole numbers. Converting them to an int
, removes the needed decimals.
Both options are not what I want.
Can someone point me in the right direction?
Edit: the relevant code, as asked:
# I have a list of numbers and I am calculating their average and rounding them first.
get_numbers = map(float, line[-1])
average_numbers = sum(get_numbers) / len(get_numbers)
rounded_numbers= round(average_numbers * 2) / 2
# So now, I've got the numbers: 3.5, 2.5, 5, 7
print "The numbers are: %.1f" % (rounded_numbers)
You can use floats' is_integer method. It returns True
if a float can be represented as an integer (in other words, if it is of the form X.0
):
li = [3.5, 2.5, 5.0, 7.0]
print([int(num) if float(num).is_integer() else num for num in li])
>> [3.5, 2.5, 5, 7]
EDIT
After OP added their code:
Instead of using list comprehension like in my original example above, you should use the same logic with your calculated average:
get_numbers = map(float, line[-1]) # assuming line[-1] is a list of numbers
average_numbers = sum(get_numbers) / len(get_numbers)
average = round(average_numbers * 2) / 2
average = int(average) if float(average).is_integer() else average
print average # this for example will print 3 if the average is 3.0 or
# the actual float representation.
Similar to the previous answer:
[int(i) if int(i) == i else i for i in li]
Or:
[int(i) if not i % 1 else i for i in li]
Technically, if you have floats and get their averages, you SHOULD get floats back. But if you just want to print them, the following should work well:
print('{} {} {} {}'.format(3.5, 2.5, 5, 7))
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.