# Trait core::ops::Rem

1.0.0 · source · []
``````pub trait Rem<Rhs = Self> {
type Output;

fn rem(self, rhs: Rhs) -> Self::Output;
}``````
Expand description

The remainder operator `%`.

Note that `Rhs` is `Self` by default, but this is not mandatory.

## Examples

This example implements `Rem` on a `SplitSlice` object. After `Rem` is implemented, one can use the `%` operator to find out what the remaining elements of the slice would be after splitting it into equal slices of a given length.

``````use std::ops::Rem;

#[derive(PartialEq, Debug)]
struct SplitSlice<'a, T: 'a> {
slice: &'a [T],
}

impl<'a, T> Rem<usize> for SplitSlice<'a, T> {
type Output = Self;

fn rem(self, modulus: usize) -> Self::Output {
let len = self.slice.len();
let rem = len % modulus;
let start = len - rem;
Self {slice: &self.slice[start..]}
}
}

// If we were to divide &[0, 1, 2, 3, 4, 5, 6, 7] into slices of size 3,
// the remainder would be &[6, 7].
assert_eq!(SplitSlice { slice: &[0, 1, 2, 3, 4, 5, 6, 7] } % 3,
SplitSlice { slice: &[6, 7] });``````
Run

## Required Associated Types

The resulting type after applying the `%` operator.

## Required Methods

Performs the `%` operation.

##### Example
``assert_eq!(12 % 10, 2);``
Run

## Implementors

The remainder from the division of two floats.

The remainder has the same sign as the dividend and is computed as: `x - (x / y).trunc() * y`.

#### Examples

``````let x: f32 = 50.50;
let y: f32 = 8.125;
let remainder = x - (x / y).trunc() * y;

// The answer to both operations is 1.75
assert_eq!(x % y, remainder);``````
Run

The remainder from the division of two floats.

The remainder has the same sign as the dividend and is computed as: `x - (x / y).trunc() * y`.

#### Examples

``````let x: f32 = 50.50;
let y: f32 = 8.125;
let remainder = x - (x / y).trunc() * y;

// The answer to both operations is 1.75
assert_eq!(x % y, remainder);``````
Run

This operation satisfies `n % d == n - (n / d) * d`. The result has the same sign as the left operand.

#### Panics

This operation will panic if `other == 0` or if `self / other` results in overflow.

This operation satisfies `n % d == n - (n / d) * d`. The result has the same sign as the left operand.

#### Panics

This operation will panic if `other == 0` or if `self / other` results in overflow.

This operation satisfies `n % d == n - (n / d) * d`. The result has the same sign as the left operand.

#### Panics

This operation will panic if `other == 0` or if `self / other` results in overflow.

This operation satisfies `n % d == n - (n / d) * d`. The result has the same sign as the left operand.

#### Panics

This operation will panic if `other == 0` or if `self / other` results in overflow.

This operation satisfies `n % d == n - (n / d) * d`. The result has the same sign as the left operand.

#### Panics

This operation will panic if `other == 0` or if `self / other` results in overflow.

This operation satisfies `n % d == n - (n / d) * d`. The result has the same sign as the left operand.

#### Panics

This operation will panic if `other == 0` or if `self / other` results in overflow.

This operation satisfies `n % d == n - (n / d) * d`. The result has the same sign as the left operand.

#### Panics

This operation will panic if `other == 0`.

This operation satisfies `n % d == n - (n / d) * d`. The result has the same sign as the left operand.

#### Panics

This operation will panic if `other == 0`.

This operation satisfies `n % d == n - (n / d) * d`. The result has the same sign as the left operand.

#### Panics

This operation will panic if `other == 0`.

This operation satisfies `n % d == n - (n / d) * d`. The result has the same sign as the left operand.

#### Panics

This operation will panic if `other == 0`.

This operation satisfies `n % d == n - (n / d) * d`. The result has the same sign as the left operand.

#### Panics

This operation will panic if `other == 0`.

This operation satisfies `n % d == n - (n / d) * d`. The result has the same sign as the left operand.

#### Panics

This operation will panic if `other == 0`.