1pub fn to_binary(number: &f64) -> String {
2
3 let mut number_as_integer: u128 = number.trunc().to_string().parse().unwrap();
4 let mut bits_string = String::from("");
5
6 while number_as_integer >= 1 {
8 bits_string.push_str(&(number_as_integer % 2).to_string());
9 number_as_integer = number_as_integer / 2;
10 }
11 bits_string = bits_string.chars().rev().collect::<String>();
12 if number.fract() != 0.0 {
16 if number.trunc() == 0.0 {
17 bits_string.push_str("0");
18 }
19 bits_string.push_str(".");
20
21 let mut number_fractional_part: f64 = number.fract();
22
23 let mut denominator: f64 = 2.0;
24 for _x in 0..10 {
25 if number_fractional_part < 1.0/denominator {
26 bits_string.push_str("0");
27 } else if number_fractional_part > 1.0/denominator {
28 bits_string.push_str("1");
29 number_fractional_part -= 1.0/denominator;
30 } else if number_fractional_part == 1.0/denominator {
31 bits_string.push_str("1");
32 break;
33 }
34 denominator *= 2.0;
35 }
36 }
37 bits_string
39}
40
41pub fn to_decimal(number: &f64) -> f64 {
42
43 let bits_string: &str = &number.to_string();
44 let bits_string_iterator = bits_string.split("");
45 let mut decimal_number_result: f64 = 0.0;
46 let mut is_fractional_part = false;
47 let mut denominator: f64 = 2.0;
48
49 for i in bits_string_iterator {
51 match i {
52 "1" => {
53 if is_fractional_part == false {
54 decimal_number_result = decimal_number_result * 2.0 + 1.0
55 } else {
56 decimal_number_result += 1.0/denominator;
57 denominator *= 2.0;
58 }
59 },
60 "0" => {
61 if is_fractional_part == false {
62 decimal_number_result = decimal_number_result * 2.0;
63 } else {
64 denominator *= 2.0;
65 }
66 },
67 "." => is_fractional_part = true,
68 _ => ()
69 }
70 }
71 decimal_number_result
73}
74
75pub fn u128_to_binary(number: &u128) -> u128 {
76
77 let mut decimal_number: u128 = number.to_string().parse().unwrap();
78 let mut bits_string = String::from("");
79
80 while decimal_number >= 1 {
82 bits_string.push_str(&(decimal_number % 2).to_string());
83 decimal_number = decimal_number / 2;
84 }
85 bits_string = bits_string.chars().rev().collect::<String>();
86 return bits_string.parse::<u128>().unwrap();
88}
89
90pub fn u128_to_decimal(binary_number: &u128) -> u128 {
91
92 let bits_string: &str = &binary_number.to_string();
93 let bits_string_iterator = bits_string.split("");
94 let mut decimal_number_result: u128 = 0;
95
96 for i in bits_string_iterator {
98 match i {
99 "1" => decimal_number_result = decimal_number_result * 2 + 1,
100 "0" => decimal_number_result = decimal_number_result * 2,
101 "." => break,
102 _ => ()
103 }
104 }
105 decimal_number_result
107}