**Questionable goal**

Code suffers from/abuses [double rounding](https://en.wikipedia.org/wiki/Rounding#Double_rounding).

Javascript numbers use [binary64](https://en.wikipedia.org/wiki/Double-precision_floating-point_format) encoding.  That provides about 10<sup>19</sup> different values.  
10.395 is _not_ one of them as it is not a [dyadic rational](https://en.wikipedia.org/wiki/Dyadic_rational), an integer times a power of 2.

In the vicinity of 10.395 are encodable values:  
10.394999999999999573674358543939888477325439453125  
10.3950000000000013500311979441903531551361083984375  

As a string "10.395" converted to a number, it is convert to the closer, yet lesser one.

With OP's code, both of these return a value near 10.40.

So if `number` is a _string_ like "10.395", 10.40 is a good result.
Yet if `number` is a _number_ prints like 10.395, it really is 10.394999... and 10.39 is a good result.