Round a floating-point number down to the nearest integer?

PythonFloating PointIntegerRounding

Python Problem Overview


I want to take a floating-point number and round it down to the nearest integer. However, if it's not a whole, I always want to round down the variable, regardless of how close it is to the next integer up. Is there a way to do this?

Python Solutions


Solution 1 - Python

Simple

print int(x)

will work as well.

Solution 2 - Python

One of these should work:

import math
math.trunc(1.5)
> 1
math.trunc(-1.5)
> -1
math.floor(1.5)
> 1
math.floor(-1.5)
> -2

Solution 3 - Python

x//1

The // operator returns the floor of the division. Since dividing by 1 doesn't change your number, this is equivalent to floor but no import is needed. Notes:

  1. This returns a float
  2. This rounds towards -∞

Solution 4 - Python

To get floating point result simply use:

round(x-0.5)

It works for negative numbers as well.

Solution 5 - Python

I think you need a floor function :

math.floor(x)

Solution 6 - Python

a lot of people say to use int(x), and this works ok for most cases, but there is a little problem. If OP's result is:

x = 1.9999999999999999

it will round to

x = 2

after the 16th 9 it will round. This is not a big deal if you are sure you will never come across such thing. But it's something to keep in mind.

Solution 7 - Python

If you don't want to import math, you could use:

int(round(x))

Here's a piece of documentation:

>>> help(round)
Help on built-in function round in module __builtin__:

round(...)
    round(number[, ndigits]) -> floating point number
    
    Round a number to a given precision in decimal digits (default 0 digits).
    This always returns a floating point number.  Precision may be negative.

Solution 8 - Python

If you working with numpy, you can use the following solution which also works with negative numbers (it's also working on arrays)

import numpy as np
def round_down(num):
    if num < 0:
        return -np.ceil(abs(num))
    else:
        return np.int32(num)
round_down = np.vectorize(round_down)

round_down([-1.1, -1.5, -1.6, 0, 1.1, 1.5, 1.6])
> array([-2., -2., -2.,  0.,  1.,  1.,  1.])

I think it will also work if you just use the math module instead of numpy module.

Solution 9 - Python

Just make round(x-0.5) this will always return the next rounded down Integer value of your Float. You can also easily round up by do round(x+0.5)

Solution 10 - Python

Don't know if you solved this, but I just stumble upon this question. If you want to get rid of decimal points, you could use int(x) and it will eliminate all decimal digits. Theres no need to use round(x).

Solution 11 - Python

It may be very simple, but couldn't you just round it up then minus 1? For example:

number=1.5
round(number)-1
> 1

Solution 12 - Python

I used this code where you subtract 0.5 from the number and when you round it, it is the original number rounded down.

> round(a-0.5)

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAnthony PerezView Question on Stackoverflow
Solution 1 - PythonGhostwriterView Answer on Stackoverflow
Solution 2 - PythonU2EF1View Answer on Stackoverflow
Solution 3 - PythonHuy DView Answer on Stackoverflow
Solution 4 - PythonDmitryGView Answer on Stackoverflow
Solution 5 - PythonvoidMainReturnView Answer on Stackoverflow
Solution 6 - PythonlokilindoView Answer on Stackoverflow
Solution 7 - PythonTylerView Answer on Stackoverflow
Solution 8 - PythonMr PoinView Answer on Stackoverflow
Solution 9 - PythonDominic NagelView Answer on Stackoverflow
Solution 10 - PythonGaahbonView Answer on Stackoverflow
Solution 11 - Pythonuser3645688View Answer on Stackoverflow
Solution 12 - Pythonuser10555509View Answer on Stackoverflow