You could try padding those "numbers" with a leading or trailing space character or non-numeric character and see if that makes any difference. I do not know how this will affect whatever those "numbers" are being used for but, hopefully, it will force your app to treat them as text.
This is what I see going on:
The CSV is not the problem. The CSV will have the characters that make up those numbers; the same characters you see on the screen. You can view the CSV file with TextEdit to see what it looks like. It will not have it in scientific notation.
I am not familiar with what you are using to view/read the CSV but it appears to me that it is the problem. My guess is that the second number is being treated differently because it has 15 digits followed by a 0 vs the first one that has a non-zero 16th digit. 15 digits is an acceptable number (16 digits is not) so the app being used to view the CSV is dropping the trailing 0 and turning it into an exponential number. It is treating the 16 digit "number" as text