pub fn to_binary(number: &f64) -> String {
let mut number_as_integer: u128 = number.trunc().to_string().parse().unwrap();
let mut bits_string = String::from("");
while number_as_integer >= 1 {
bits_string.push_str(&(number_as_integer % 2).to_string());
number_as_integer = number_as_integer / 2;
}
bits_string = bits_string.chars().rev().collect::<String>();
if number.fract() != 0.0 {
if number.trunc() == 0.0 {
bits_string.push_str("0");
}
bits_string.push_str(".");
let mut number_fractional_part: f64 = number.fract();
let mut denominator: f64 = 2.0;
for _x in 0..10 {
if number_fractional_part < 1.0/denominator {
bits_string.push_str("0");
} else if number_fractional_part > 1.0/denominator {
bits_string.push_str("1");
number_fractional_part -= 1.0/denominator;
} else if number_fractional_part == 1.0/denominator {
bits_string.push_str("1");
break;
}
denominator *= 2.0;
}
}
bits_string
}
pub fn to_decimal(number: &f64) -> f64 {
let bits_string: &str = &number.to_string();
let bits_string_iterator = bits_string.split("");
let mut decimal_number_result: f64 = 0.0;
let mut is_fractional_part = false;
let mut denominator: f64 = 2.0;
for i in bits_string_iterator {
match i {
"1" => {
if is_fractional_part == false {
decimal_number_result = decimal_number_result * 2.0 + 1.0
} else {
decimal_number_result += 1.0/denominator;
denominator *= 2.0;
}
},
"0" => {
if is_fractional_part == false {
decimal_number_result = decimal_number_result * 2.0;
} else {
denominator *= 2.0;
}
},
"." => is_fractional_part = true,
_ => ()
}
}
decimal_number_result
}
pub fn u128_to_binary(number: &u128) -> u128 {
let mut decimal_number: u128 = number.to_string().parse().unwrap();
let mut bits_string = String::from("");
while decimal_number >= 1 {
bits_string.push_str(&(decimal_number % 2).to_string());
decimal_number = decimal_number / 2;
}
bits_string = bits_string.chars().rev().collect::<String>();
return bits_string.parse::<u128>().unwrap();
}
pub fn u128_to_decimal(binary_number: &u128) -> u128 {
let bits_string: &str = &binary_number.to_string();
let bits_string_iterator = bits_string.split("");
let mut decimal_number_result: u128 = 0;
for i in bits_string_iterator {
match i {
"1" => decimal_number_result = decimal_number_result * 2 + 1,
"0" => decimal_number_result = decimal_number_result * 2,
"." => break,
_ => ()
}
}
decimal_number_result
}