Personally I don't tend to use the getpropertyvalue/setpropertyvalue functions (in favour of operating on the attribute reference entities/objects directly), but in testing, both functions will return an error if the supplied tag name does not correspond to an attribute reference held by the block. As such, issuing a call to getpropertyvalue prior to setpropertyvalue will offer no benefit in this case.
Instead, you could account for errors using the vl-catch-all-apply function, e.g. the following will return T if successful, else nil:
(not (vl-catch-all-error-p (vl-catch-all-apply 'setpropertyvalue (list obj "QUANTITY" (rtos (* di ht) 2 3)))))