In my experience, empty plastic spools weigh between 125 and 250 grams. My practice is to weigh a full spool after removing all the packaging and record that weigh before using any.
While using the spool I assume the weight of the spool is equal to the recorded gross weight less 1,000 grams. In actual practice over many spools, they invariably end up weighing 5-50 grams more than calculated, meaning that I got a few meters less filament than I paid for. I've never seen one go the other way.
Once a spool is nearly empty (~30 m or less) it's fairly easy to count the remaining wraps, visually estimate the spool core diameter and calculate the remaining length. Experience indicates this can be done to within a meter.
If it's necessary to know the amount with high precision it's not terribly difficult to remove the remaining filament and weigh it directly. The remnant can then be rewound or used directly from a loose coil. I don't recommend that method for anything over 25-30 meters but have done it from time to time with that amount or less without serious problems.
As a final measure if attempting to use the bitter end of a spool, it's wise to be prepared to do a pause and filament swap to a new spool if coming up short. That's fairly easily done but there is always a risk that there could be a slight color mismatch between old and new. I have tried splicing a new length on the fly to one that's coming up short. I've had mixed results with that and now much prefer the pause-and-swap method.
The safest practice if there's doubt that enough remains for a specific job would be to use a new spool and save the nearly exhausted one for a smaller print.