If I understand you correctly you should always use numeric data types for numeric data. So instead of converting the data, change the underlying type.
What comes to converting the data 16 digits is a too big number for int which uses only 4 bytes. Because of this you need to use bigint.
Also the conversion needs to go through float or similar type which may cause a loss of precision.
Having that said, try something like
select cast(cast('5.95E+15' as float) as bigint)
Addition
To test if the data is numeric, consider the following
select cast(cast((case isnumeric('5.95E+15') when 1 then '5.95E+15' else null end) as float) as bigint)
select cast(cast((case isnumeric('A5.95E+15') when 1 then 'A5.95E+15' else null end) as float) as bigint)