Similar to the `int` data type, `floats` also have several additional methods useful in various scenarios.

For example, you can directly check if the float number is actually an integer with `is_integer()`:

``````>>> (5.9).is_integer()
False
>>> (-9.0).is_integer()
True
``````

Integer values might be preferred over floats in some cases and you can convert a `float` to a `tuple` matching a fraction with integer values:

``````>>> (-5.5).as_integer_ratio()
(-11,2)
# -11 / 2 == -5.5
``````

As floats’ numbers representation in binary is not really human-friendly and tends to be lengthier with precision, the hexadecimal format is preferred. Such hexadecimal representations have the form:

``````[sign]['0x']int['.' fraction]['p' exponent]
# e.g 0x1.8000000000000p+0 -> 1.5
# 1.5 in decimal is 1.8 in hex
# 0 - sign
# int - str of hex. digits of integer part
# fraction - same for fractional part
``````

To convert a float number to a hex string you can use the hex() function.

``````>>> (3.14).hex()
'0x1.91eb851eb851fp+1'
>>> float.hex(1.5)
'0x1.8000000000000p+0'
``````

The reverse can be achieved with the fromhex() class method:

``````>>> float.fromhex('0x1.91eb851eb851fp+1')
3.14
>>> float.fromhex('0x1.8000000000000p+0')
1.5
``````