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