Skip to content

Commit

Permalink
Merge pull request #1384 from sakex/master
Browse files Browse the repository at this point in the history
Add 1.45.0 cast documentation
  • Loading branch information
marioidival authored Oct 9, 2020
2 parents 7d3ff1c + 1331757 commit 1524759
Showing 1 changed file with 20 additions and 0 deletions.
20 changes: 20 additions & 0 deletions src/types/cast.md
Original file line number Diff line number Diff line change
Expand Up @@ -59,5 +59,25 @@ fn main() {
println!("1000 as a u8 is : {}", 1000 as u8);
// and the two's complement of 232 is -24
println!(" 232 as a i8 is : {}", 232 as i8);
// Since Rust 1.45, the `as` keyword performs a *saturating cast* when casting from float to int.
// If the floating point value exceeds the upper bound or is less than the lower bound, the returned value will be equal to the bound crossed.
// 300.0 is 255
println!("300.0 is {}", 300.0_f32 as u8);
// -100.0 as u8 is 0
println!("-100.0 as u8 is {}", -100.0_f32 as u8);
// nan as u8 is 0
println!("nan as u8 is {}", f32::NAN as u8);
// This behavior incures a small runtime cost and can be avoided with unsafe methods, however the results might overflow and return **unsound values**. Use these methods wisely:
unsafe {
// 300.0 is 44
println!("300.0 is {}", 300.0_f32.to_int_unchecked::<u8>());
// -100.0 as u8 is 156
println!("-100.0 as u8 is {}", (-100.0_f32).to_int_unchecked::<u8>());
// nan as u8 is 0
println!("nan as u8 is {}", f32::NAN.to_int_unchecked::<u8>());
}
}
```

0 comments on commit 1524759

Please sign in to comment.