Skip to main content
  1. Blogs/

Round a number to some multiple of another number

·201 words·1 min·
code tips

Recently I needed to round a rotation value to increments of 45 degrees. Every once in a while I run into needing to do this and I always forget the trick to it, but it’s rather simple:

To round a number x to a multiple of another number n:

float x = 23.9;
int n = 45;

float result = round(x/n)*n;

// result = 45

Simply divide the number x by n, round it to the nearest integer, then multiply it by n.

And here are a couple Unity C# extensions I wrote so I can do this directly on float and Vector3 values:

using UnityEngine;

public static class MathExtensions {
    // Round a floating point number to a multiple of n
    // float f = 23;
    // float rounded = f.RoundToN(45);	// returns 45
    public static float RoundToN(this float val, int n) {
        return Mathf.RoundToInt(val / n) * n;
    }

    // Round a Vector3's values to multiples of n
    // Vector3 v = new Vector3(12, 67, 187)
    // Vector3 roundedv=v.RoundToN(45) // returns (0, 45, 180)
    public static Vector3 RoundToN(this Vector3 val, int n) {
        return new Vector3( Mathf.RoundToInt(val.x / n),
                            Mathf.RoundToInt(val.y / n),
                            Mathf.RoundToInt(val.z / n)) * n;
    }
}

Related

Testing C# code in the browser
·42 words·1 min
code tips c#
Element-wise Vector Multiplication in Unity (Vector3.Scale)
·79 words·1 min
unity code tips
The top 5 things Ive learned as an Indie Unity Developer
·1402 words·7 mins
unity programming code tips