binary_ok/
lib.rs

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    //The aboves convert the integer part of the number to binary and puts it on the bits_string
7    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    //----------------------------------
13    
14    //The aboves convert the fractional part of the number to binary if it is bigger than 0.0
15    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    //----------------------------------
38    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    //The part aboves convert the number to binary
50    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    //----------------------------------
72    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    //The aboves convert the integer part of the number to binary and puts it on the bits_string
81    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    //----------------------------------
87    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    //The part aboves convert the binary_number to decimal
97    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    //----------------------------------
106    decimal_number_result
107}