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
/// Add comma to a number value by every 3 numbers from right. Ahead by prefix symbol.
///
/// # Arguments
///
/// * `number` - The number perform add commars.
/// * `prefix_symbol` - Prefix symbol of returned string.
///
/// # Returns
///
/// String form of number after adding comma.
///
/// # Examples
///
/// ```
/// use rufl::string;
///
/// assert_eq!("1,234,567", string::add_commas("1234567", ""));
///
/// assert_eq!("¥1,234,567", string::add_commas("1234567", "¥"));
///
/// assert_eq!("$1,234.567", string::add_commas(1234.567, "$"));
///
/// ```
///
pub fn add_commas<T: std::fmt::Display>(number: T, prefix_symbol: &str) -> String {
let mut num_string = number.to_string();
if num_string.len() == 0 {
return "".to_string();
}
let point_index = num_string.find('.');
let mut index = if let Some(point_index) = point_index {
point_index
} else {
num_string.len()
};
while index > 3 {
index -= 3;
num_string.insert(index, ',');
}
prefix_symbol.to_string() + &num_string
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_add_commas() {
assert_eq!("", add_commas("", ""));
assert_eq!("", add_commas("", "$"));
assert_eq!("1,234,567", add_commas("1234567", ""));
assert_eq!("¥1,234,567", add_commas("1234567", "¥"));
assert_eq!("$1,234,567", add_commas(1234567, "$"));
assert_eq!("$1,234.567", add_commas(1234.567, "$"));
assert_eq!("$12,345.6789", add_commas(12345.6789, "$"));
}
}