Floor of complex number
J, 32 31 26 bytes
j.&amp;&lt;.+((1&lt;:+)*0j1^&lt;)&amp;(1|])

Try it online!
-5 thanks to Razetime for pointing out I could take real and imag parts as left and right args.
Obligatory J answer.
For reference, per the link in the OP, Eugene McDonnell's  algorithm is:

The algorithm for the determination of g , the floor of a complex number z , may be explained informally as follows:

Let b be the point at the lower left corner of the unit square containing z . Let x and y be the fractional parts of the real and imaginary parts of z .
Then:


Let g = b if 1 &gt; (x + y) ,
Let g = (b + 1) if (1 ≤ x + y) and x ≥ y ,
Let g = (b + 0i1) if (1 ≤ x + y) and x &lt; y .


We take the real and imaginary parts as left and right args.
We note that the answer is:
b + (0 or 1 or i)

depending on the case.

j.&amp;&lt;.+ Floors both parts and converts back to complex j.&amp;&lt;./, then adds everything
to the right +.  This gives us the b + part.
(...)&amp;(1|]) Get fractional parts of real/imag pieces, and feed those as
left and right args to everything in parens.  This gives us x and y.
(1&lt;:+) Is x + y greater than or equal to 1?  Returns 0 or 1. Multiply that
by...
0j1^&lt; \$i\$ raised to &quot;is x &lt; y?&quot; -- gives us \$i\$ if true, 1 otherwise.