Nathanaëlle Courant, with help from Julien Lepiller and myself, wrote a rather complete interpreter/evaluator for OCaml parsetrees (in OCaml) as part of the Camlboot project
We take as input OCaml parsetrees, but we evaluate into a type of "value" that we defined ourselves, and stores a "float" for floating-point numbers:
type value =
...
| Float of float
...
Kenichi, I don´t understand what your own constraints, but in general I have the impression that "float" is better than "string" to represent double values used for computation. "string" was meant to accurately represent the source value and avoid any serialization/portability issue, but those constraints are rather for data exchange.