Yes, base64-encoding binary blobs and wrapping resulting text into JSON is a common practice. Many popular RESTful services do that, for example GitHub API encodes file text that way.
Base64 encoding has exactly 4/3 overhead, i.e. output text is 33% larger then the input data. That determinism is a nice property of base64.
Using base64 still means that binary blob is transferred. Representation of floats in binary form is standartized by IEEE (2 formats for
single and
double precision).
So two basic choices are:
1. Send a binary blob (base64-encoded or not) of floats. Also send a hint (in a HTTP header for example), which float format is used (e.g. "floats are IEEE 754 doubles, with no holes between them", something like "double arr[N]" in C language would produce). The receiving side would have all information to unpack the blob properly. Pro: easy to do for C/C++, no need to transform if both sides use the same standard for floats. Cons: extra care about exact binary format.
2. Transform floats into text, like to JSON or some other format. Pro: independence from the binary format, easy to debug by a human. Cons: both sides need to transform, transfer size could be inflated.