From 96f0512a45ffebbe7488332ec5e44827a14ce78d Mon Sep 17 00:00:00 2001 From: Marvin Löbel Date: Sun, 27 Jan 2013 03:05:20 +0100 Subject: Added Round trait to core --- src/libcore/num/float.rs | 33 +++++++++++++++++++++++++++++++++ 1 file changed, 33 insertions(+) (limited to 'src/libcore/num/float.rs') 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.); -- cgit 1.4.1-3-g733a5