# Converting Float Base-10 value to Base 2/8/16, then to Bytes

I’m trying to convert a float number from base10 to base2/8/16, then convert it to bytes (base256) of the converted values, by far I can do it mathematically like:

``````0.15625 (base 10) = 0.00101 (base2) = 101 x 2^-5 (base2)  --> 0x00 (positive sign), 0x05 (mantissa), 0xFB (exponent)
0.15625 (base 10) = 0.12 (base8) = 12 x 8^-2 (base8) --> 0x00 (positive sign), 0x0c (mantissa), 0xFE (exponent)
-0.15625 (base 10) = -0.00101 (base2) = -101 x 2^-5 (base2)  --> 0xFF (negative sign), 0x05 (mantissa), 0xFB (exponent)
-0.15625 (base 10) = -0.12 (base8) = -12 x 8^-2 (base8) --> 0xFF (negative sign), 0x0c (mantissa), 0xFE (exponent)
``````

Is there an existing library that can convert `float32`, `float64`, or `big.Float` from math package to the desired output or do I have to create the library on my own?

The mathematical conversion involves a lot of division in the mathematical world and I heard it can strain the CPU with too many division operations.

1 Like

In case anyone is interested how did `0.15625 (base 10)` becomes `0.00101 (base2)`, here is the link for conversion.

1 Like

On the safe side, I’m afraid you need to create your own encoding package.

`big.Float` is not going to help much in base number conversion apart from holding large numbers while `math` package only offers `exp2` functionality. Both accuracy can be different, case-by-case basis.

You can do a code reference for the exponent base conversion: https://golang.org/src/math/exp.go?s=4061:4089#L125

Another good option to refer spektre’s algorithm for base conversion. Link: https://stackoverflow.com/questions/38697852/converting-base-of-floating-point-number-without-losing-precision

1 Like

Noted with thanks!

This topic was automatically closed 90 days after the last reply. New replies are no longer allowed.