You will also find that the TField.AsString returns correctly formatted text. I deal with the issue generically in my app by setting OnGetText for all numeric types (well, the ones I care about anyway):
...
For i := 0 To FDataset.FieldCount - 1 Do
Begin
oField := FDataset.Fields[i];
If oField.DataType In [ftSmallint, ftInteger, ftWord, ftFloat, ftCurrency] Then
oField.OnGetText := @DatasetOnGetText;
End;
...
And then...
Procedure TFrameGrid.DatasetOnGetText(Sender: TField; Var aText: Ansistring;
DisplayText: Boolean);
Begin
aText := Sender.AsString;
End;