It is fundamental for float type, you can't do much there. Use nearly equal comparisons or rounding if you want to avoid precision issues in VEX, which uses 32 bit floats.
While it may be huge computer science problem, for Houdini artist it is moderately painful, all you need is to be more considerate. Comparisons will usually work if the numbers were freshly assigned, not computed by imprecise arithmetic. Therefore people usually use == and succeed most of the time.
Suppose you have points that are go down over time and you want to check if they passed ground:
if (@P.y <= 0.0)
...
else // y > 0
...
Don't use this:
// Equal case (y == 0) handled in "non reached zero" branch.
if (@P.y < 0.0)
...
else // y == 0 or y > 0
...
// y == 0 never handled.
if (@P.y < 0.0)
...
else if (@P.y > 0.0)
...
You should include equality case in one of conditions: "<= or >", "< or >=", etc., depending on the logic. This allows to handle all numbers.
If your points fall on ground and stop, you may get into troubles doing code above (consider case where point is slightly greater than zero). Instead, use some small "tolerance":
if (@P.y <= 0.001)
...
else
...
Actual value should be large enough to not yield visually incorrect results and encompass precision error for that scale. You can't have millimeter detail accuracy for skyscraper-sized object using 32-bit floats, and you will use value like 0.1. Coin-sized object, however, would allow you to use 0.00001 without facing precision issues.
You may find Fuse SOP in grid snapping mode with "tolerance-sized" division scale useful. It will round values to the nearest division, which fit all those "1.23456e-7" values to solid zeros.