This is not a BSON issue. What you are seeing is the limitations of storing floating point values. 0.01 cannot be stored exactly in a “double”. You could printf with a format that will print it as 0.01 (e.g. "%0.2f”), but the number stored is still not exactly 0.01.
If you are new to this, search for “what every programmer should know about floating point”. The seminal document is this link , but that search will bring up other useful links and guides too.
To get exact storage, you could use “fixed point”, meaning that there is some “implied” decimal place; for example storing 1.2345 as integer 12345 and 0.01 as integer 100. There are other techniques, including storing string, but it all depends on what you are trying to do.