Do you mean that the normal datapoint MemoryUsageKB is returning a string to LM that looks like "1.23456789E13"? Or is LM getting the large number and displaying it in scientific notation on the raw data tab?
To know what is actually being returned, do a poll now and scroll down to the bottom of the poll now dialog box. It'll show you the entire blob of text returned through stdout to LM. That will show you if the returned value is actually a string containing a number in scientific notation or not.
If it's the latter (suspected), Mike_Moniz's comment about it just being LM displaying it that way in the raw data tab is the thing to notice. If the collection task returns a super large number, that super large number is stored in the database. When the raw data tab displays it, LM converts it to scientific notatation at runtime. The underlying value is still just an integer (probably a double due to the size). In that case, you can just use a regular complex datapoint converting the value to bytes by multiplying by 1024 or convert to GB by dividing by 1024/1024.
If it's the former and the task itself is returning a string, not a number, is this not a scripted collection task? If it's scripted, obviously it would be better to convert it before outputting it so that the normal datapoint has it in the units you want. If it's not scripted, you will have found the first actual use case I've ever seen for a groovy based complex datapoint. I don't think output is an array, it's usually the entire blob of text as output by the collection task. So you'd first have to parse the output to get the normal datapoints and their values. Then you'd need to make the conversion from sci-notation to an integer, then you'd need to return that value using a return statement.