Note that if you take a prime $p$ and treat the matrix $A$ as a matrix $A'$ over $\mathbb{Z} / p \mathbb{Z}$, then from the property of $\operatorname{rank}(A)$ being the largest order of a non-zero minor in $A$, and the fact that treating a matrix over $\mathbb{Z}$ as a matrix over $\mathbb{Z} / p \mathbb{Z}$ does the same to the determinant, we get that $\operatorname{rank}(A') \leq \operatorname{rank}(A)$, and if $p$ doesn't divide a particular determinant (which depends on $A$) then the ranks are equal. Therefore, we can try a few random $p$s, and take the maximum of $\operatorname{rank}(A')$.
This is obviously numerically OK, as we only need to work with integers mod $p$, and requires $O(T n^3)$ operations, where $T$ is the number of tries.
Let's estimate the number of required trials - if the maximum absolute value in an $n \times n$ matrix is $m$, by Hadamard's inequality the determinant is at most $m^n n^{\frac n2}$. From this, we can derive a trivial upper bound for its number of different prime divisors - $n (\log_2(m) + \frac{\log_2(n)}2)$, so if we sample uniformly from a sufficiently large distribution, which can be efficiently in practice by just doing a primality test on random values, we only need $O(k)$ tries to get a error rate of $2^{-k}$. This requires numbers with size $O(\log n + \log \log m)$, which is usually feasible.