Nejdřív se explicitně castuje double na long a dojde k oříznutí desetiných čísel, pak se při porovnání implicitně castuje ta hodnota zpět do double a porovnají se. Jen přemýšlím, jestli tam není nějaký edge case. Respektive vím, že v předpokládané validnich hodnot není, ale obecně, když vezmu i subnormalní čísla, nebo naopak velmi velká?
Já bych psal úplně automaticky
If (Math.abs(value - Math.round(value)) < Double.MIN_VALUE)
protože mi to přijde čitelnější.