Rust 编程小技巧(8)
1. 取整函数 floor()
floor函数对浮点数进行向下取整
示例代码:
fn main() { let x: f32 = 3.23; let s = x.floor(); println!("{}", s); }
输出:
3
2. 取整函数ceil()
ceil函数对浮点数进行向上取整
示例代码:
fn main() { let x: f32 = 3.23; let s = x.ceil(); println!("{}", s); }
输出:
4
3. 取整函数 round()
round函数对浮点数进行四舍五入取整
示例代码:
fn main() { let x: f32 = 3.23; let s = x.round(); println!("{}", s); let x: f32 = 3.63; let s = x.round(); println!("{}", s); }
输出:
3
4
4. 保留小数位数
使用以上三个取整函数达成目标:
fn main() { let mut x: f32 = 3.1415926; let s = format!("{:.4}", x); println!("{}\n", s); let s = (x * 10000.0).round() / 10000.0; println!("{}", s); let s = (x * 10000.0).ceil() / 10000.0; println!("{}", s); let s = (x * 10000.0).floor() / 10000.0; println!("{}\n", s); x = 3.1415333; let s = (x * 10000.0).round() / 10000.0; println!("{}", s); let s = (x * 10000.0).ceil() / 10000.0; println!("{}", s); let s = (x * 10000.0).floor() / 10000.0; println!("{}", s); }
5. 字符串转整数
unwrap()
用于从 Result 对象中获取 Ok 值。如果 Result 对象是 Err,则会直接调用 panic! 来引发一个运行时错误。
示例代码:
fn main() { let s = "123"; let i = s.parse::<i32>().unwrap(); println!("{:?}", i); let s = "12x3"; let i = s.parse::<i32>(); println!("{:?}", i); }
输出:
123
Err(ParseIntError { kind: InvalidDigit })
unwrap_or()
用于从 Result 对象中获取值,如果 Result 对象是 Err,则返回一个默认值。
示例代码:
fn main() { let s = "123"; let i: i32 = s.parse().unwrap_or(0); println!("{:?}", i); let s = "12x3"; let i = s.parse().unwrap_or(0); println!("{:?}", i); }
输出:
123
0
匹配模式: let ... match
fn main() { let s = "123"; let i = match s.parse::<i32>() { Ok(i) => i, Err(_e) => -1, }; println!("{:?}", i); let s = "12x3"; let i = match s.parse::<i32>() { Ok(i) => i, Err(_e) => -1, }; println!("{:?}", i); }
输出:
123
-1
附:match语法
是一种模式匹配工具,用于根据值的特征进行多分支比较。它的基本语法如下:
match value { pattern1 => result1, pattern2 => result2, ... _ => resultN, }
这里的value是要被匹配的值,可以与各个模式进行比较。如果value符合某个模式,则执行对应的result。如果所有模式都不符合,最后的那个_ => resultN会被执行。
模式可以是任何可能被匹配的值或模式。例如,可以使用变量来捕获模式中的值,或者使用范围模式来匹配特定的值。
let number = 3; match number { 1 => println!("Number is 1"), 2 => println!("Number is 2"), 3 => println!("Number is 3"), _ => println!("Number is not 1, 2, or 3"), }
在这个例子中,number的值是3,因此它与第三个模式匹配,并打印出"Number is 3"。
另外,还可以使用范围模式,例如:
let number = 5; match number { 1..=5 => println!("Number is between 1 and 5"), _ => println!("Number is not between 1 and 5"), }
在这个例子中,number的值是5,因此它与第一个模式匹配,并打印出"Number is between 1 and 5"。