近い方に丸める版

public class Program
{
	public static void Main(string[] args)
	{
		var pos = new Position() { x = 122, y = 256 };

		var fittedPos = FitToGrid(pos, 3);

		Console.WriteLine(pos);
		Console.WriteLine(fittedPos);

		Console.ReadKey();
	}

	private static Position FitToGrid(Position sourcePosition, int gridPitch)
	{
		Position retPos;
		var diffPosX = sourcePosition.x % gridPitch;
		var diffPosY = sourcePosition.y % gridPitch;

		if ( gridPitch / 2 < diffPosX )
		{
			retPos.x = sourcePosition.x + ( gridPitch - diffPosX );
		}
		else
		{
			retPos.x = sourcePosition.x - diffPosX;
		}

		if ( gridPitch / 2 < diffPosY )
		{
			retPos.y = sourcePosition.y + ( gridPitch - diffPosY );
		}
		else
		{
			retPos.y = sourcePosition.y - diffPosY;
		}

		return retPos;
	}
}

public struct Position
{
	public int x;
	public int y;

	public override string ToString()
	{
		return String.Format("座標:x={0}, y={1}", this.x, this.y);
	}
}

実行結果

座標:x=122, y=256
座標:x=123, y=255