1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
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("");

    //The aboves convert the integer part of the number to binary and puts it on the bits_string
    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>();
    //----------------------------------
    
    //The aboves convert the fractional part of the number to binary if it is bigger than 0.0
    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;

    //The part aboves convert the number to binary
    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("");

    //The aboves convert the integer part of the number to binary and puts it on the bits_string
    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;

    //The part aboves convert the binary_number to decimal
    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
}