Yes, the margin for potatoes is there because potatoes are discrete. A single potatoe weighs something around 100-300 grams, so hitting exactly 1kg is not that trivial. But bytes are bytes. If it says 16GB, I want at least 16GB.
I think allowing a small margin is fair, for the same reason as potatoes. When you manufacture a module some portion of the module will be unusable and disabled in testing.
In CPU-land this is done by manufacturers already - they manufacture many of the same generation of processor as the most performant version, and then test the individual items produced, disabling poorly constructed parts and downgrading the specification as they do it until they're left with a range of products at various performance points.