Skip to content

bin(num). convert ZERO and negative decimal numbers to binary. #1093

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 7 commits into from
Aug 3, 2019
59 changes: 46 additions & 13 deletions conversions/decimal_to_binary.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,24 +2,57 @@


def decimal_to_binary(num):
"""Convert a Decimal Number to a Binary Number."""

"""
Convert a Integer Decimal Number to a Binary Number as str.
>>> decimal_to_binary(0)
'0b0'
>>> decimal_to_binary(2)
'0b10'
>>> decimal_to_binary(7)
'0b111'
>>> decimal_to_binary(35)
'0b100011'
>>> # negatives work too
>>> decimal_to_binary(-2)
'-0b10'
>>> # other floats will error
>>> decimal_to_binary(16.16) # doctest: +ELLIPSIS
Traceback (most recent call last):
...
TypeError: 'float' object cannot be interpreted as an integer
>>> # strings will error as well
>>> decimal_to_binary('0xfffff') # doctest: +ELLIPSIS
Traceback (most recent call last):
...
TypeError: 'str' object cannot be interpreted as an integer
"""

if type(num) == float:
raise TypeError("'float' object cannot be interpreted as an integer")
if type(num) == str:
raise TypeError("'str' object cannot be interpreted as an integer")

if num == 0:
return "0b0"

negative = False

if num < 0:
negative = True
num = -num

binary = []
while num > 0:
binary.insert(0, num % 2)
num >>= 1
return "".join(str(e) for e in binary)

if negative:
return "-0b" + "".join(str(e) for e in binary)

def main():
"""Print binary equivelents of decimal numbers."""
print("\n2 in binary is:")
print(decimal_to_binary(2)) # = 10
print("\n7 in binary is:")
print(decimal_to_binary(7)) # = 111
print("\n35 in binary is:")
print(decimal_to_binary(35)) # = 100011
print("\n")
return "0b" + "".join(str(e) for e in binary)


if __name__ == '__main__':
main()
if __name__ == "__main__":
import doctest
doctest.testmod()