This seems total crazy to me:
so in the REPL I write:
julia> using Formatting
julia> ff= string(“{:.e”,4,“E”,“}”}
“{:.4e}”
Then I use ff to format a number like:
julia> zz = Formatting.format(ff,1E-8)
“1.0000e-08” # correct
and,
julia> zz = Formatting.format(ff,2E-8)
“2.0000e-08” # correct
BUT, for the specific number 3E-8
I get:
julia> zz = Formatting.format(ff,3.0E-8)
“2.10000E-08” # WRONG!!
BUT
julia> zz = Formatting.format(ff,3.0E-9)
“3.0000E-09” # correct
So please tell my that I’m doing something stupid and this is not a bug. Works the same way in a .jl script. Version 1.6.1 (2021-04-23)
zz = Formatting.format(ff,30.0E-9)
“2.10000E-08” # WRONG!!
Also gives the same erroneous result.
There seem to be some longstanding bugs in the floating-point formatting provided by the Formatting.jl package (e.g. printfmt("1:.4e, 40000.0) prints 3.10000e+04 · Issue #71 · JuliaIO/Formatting.jl · GitHub).
I would tend to recommend using Julia’s Printf
standard library instead:
julia> using Printf
julia> @sprintf("%0.4E", 3.0e-8)
"3.0000E-08"
PS. Please quote your code.
2 Likes
Ok thanks. The reason I used Formatting.format is because I need the actual formatting string to be a variable since in my use case I am change the significant digits (e.g. might be “{:.5e}” vs. “{:.4e}” ) and @sprintf can’t handle a variable for the string. Guess I’'ll try a different approach.
This should be supported soon in Printf (adding dynamic width and precision to printf by johanmon · Pull Request #40105 · JuliaLang/julia · GitHub) but won’t be in an official release until Julia 1.8, unfortunately.
1 Like