I think probably the cleanest way to do this (at least, if you have only a single string, or are faced with a separate string for each number you wish to convert as a result of some other process) is to use the undocumented function ``Internal`StringToDouble``, i.e.: s = "1.23e-5"; Internal`StringToDouble[s] which gives: 0.0000123 However, if you are trying to convert many such numbers at once, the standard, documented methods (`Import`, `Read`, etc.), are likely to represent better approaches. UPDATE: As of at least [version 12.3][1] the proper way to invoke this is: Internal`StringToMReal["1.23e-5"] [1]: https://mathematica.stackexchange.com/questions/246449/is-internalstringtodouble-broken-in-12-3