Try also code below using significant digits and based on this other post.
using Printf
function full_float_signif(x::Float64, sigdig::Int)
(x == 0) && (return (1, "0"))
x = round(x, sigdigits=sigdig)
n = length(@sprintf("%d", abs(x))) # length of the integer part
if (x ≤ -1 || x ≥ 1)
decimals = max(sigdig - n, 0) # 'sig - n' decimals needed
else
Nzeros = ceil(Int, -log10(abs(x))) - 1 # No. zeros after decimal point before first number
decimals = sigdig + Nzeros
end
s = @sprintf("%.*f", decimals, x)
return length(s), s
end
# Example:
full_float_signif(1.87589e-17, 6) # (24, "0.0000000000000000187589")