Floor is the best way to drop decimals. Your method is less clear, but was presumably necessary before the floor command was implemented.
appear = random 3; //creates a random number from 0.0 to 2.999999
appear = floor appear; //Drops the decimal values to give you 0,1, or 2,
Not convinced your suggestion will work, Crashdome, since I suspect that the way you are setting the variable is probably going to end up with it being set AFTER the 3 objects are checked for placing (and, appear being nil at this point, none will appear).
However, assuming that the methods we suggested didn't work, just cut the Gordian knot (sorry, I generally find scripting things avoids having to learn non-intuitive ways to use the editor). This also makes it very much easier to update, if you want to have a different number of objects. All objects should be set to appear normally in the editor:
// Call from init.sqf:
// _objects = [obj1, obj2, obj3];
// [_objects] execVM "keepOne.sqf";
if (not isServer) exitWith {};
private ["_objects", "_keep"];
_objects = _this select 0;
_keep = _objects select (floor random count _objects); // Choose one to keep.
_objects = _objects - [_keep]; // Remove it from the ones available.
{ deleteVehicle _x } forEach _objects; // Delete all the rest.
nil;