It seems that the conversion that's taking place in the the constructor incorrectly takes first six decimal places even if they are zeros and then does something funky with the last digit.
You do have the source code, so there is no reason to guess what the String class is doing.