A delete-insert is a higher cost operation than an update.
If the reason is not obvious, it is because you have to store undo/redo information for the complete row being removed, including the modification of all index entries and checks for referential integrity violations caused by the deletion, followed by the insert of a new row with all of the undo/redo, index entry, integrity checks etc.. the new row might also be in a different block to the deletion so now you are doubling (at least) the physical i/o requirements.
Also consider the impact on triggers and logging. And you have to grant insert and delete privileges when you could just be granting update privileges.
I'm sure that there is a regular programming paradigm, such as "When I want to assign a new value to a variable, I always set it to zero first ..." but i fear that it wouldn't convey the full horror of the situation.