diff options
| author | Marvin Löbel <loebel.marvin@gmail.com> | 2013-01-27 03:05:20 +0100 |
|---|---|---|
| committer | Brian Anderson <banderson@mozilla.com> | 2013-02-03 15:37:23 -0800 |
| commit | 96f0512a45ffebbe7488332ec5e44827a14ce78d (patch) | |
| tree | 1375f6a28af48240f19b851a7e3910fefdd4c330 /src/libcore/num/float.rs | |
| parent | 40f0b45f8e42357f1f16669ab937e13df21161f3 (diff) | |
| download | rust-96f0512a45ffebbe7488332ec5e44827a14ce78d.tar.gz rust-96f0512a45ffebbe7488332ec5e44827a14ce78d.zip | |
Added Round trait to core
Diffstat (limited to 'src/libcore/num/float.rs')
| -rw-r--r-- | src/libcore/num/float.rs | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/src/libcore/num/float.rs b/src/libcore/num/float.rs index b90edec4d96..1d1be6df87a 100644 --- a/src/libcore/num/float.rs +++ b/src/libcore/num/float.rs @@ -488,6 +488,39 @@ impl float: num::One { static pure fn one() -> float { 1.0 } } +impl float: num::Round { + #[inline(always)] + pure fn round(&self, mode: num::RoundMode) -> float { + match mode { + num::RoundDown + => f64::floor(*self as f64) as float, + num::RoundUp + => f64::ceil(*self as f64) as float, + num::RoundToZero if is_negative(*self) + => f64::ceil(*self as f64) as float, + num::RoundToZero + => f64::floor(*self as f64) as float, + num::RoundFromZero if is_negative(*self) + => f64::floor(*self as f64) as float, + num::RoundFromZero + => f64::ceil(*self as f64) as float + } + } + + #[inline(always)] + pure fn floor(&self) -> float { f64::floor(*self as f64) as float} + #[inline(always)] + pure fn ceil(&self) -> float { f64::ceil(*self as f64) as float} + #[inline(always)] + pure fn fract(&self) -> float { + if is_negative(*self) { + (*self) - (f64::ceil(*self as f64) as float) + } else { + (*self) - (f64::floor(*self as f64) as float) + } + } +} + #[test] pub fn test_from_str() { assert from_str(~"3") == Some(3.); |
