Skip to content

Instantly share code, notes, and snippets.

@jakewilliami
Created September 29, 2021 21:44
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jakewilliami/0440a1adbab6131532ddd46b7a4e4076 to your computer and use it in GitHub Desktop.
Save jakewilliami/0440a1adbab6131532ddd46b7a4e4076 to your computer and use it in GitHub Desktop.
# This was my version of Formatting.jl's `format(..., comma = true)`
# I did this for fun, not having a look at Formatting.jl's version
# It looks like this is how they did it:
# https://github.com/JuliaIO/Formatting.jl/blob/master/src/cformat.jl#L77-L93
# Quite different to how I did it...probably benchmarks better though
function format_number(n::String, delim::Union{Char, S}) where {S <: AbstractString}
len = length(n)
io = IOBuffer()
for (i, c) in enumerate(reverse(n))
print(io, c)
if iszero(mod(i, 3)) && i != len
print(io, delim)
end
end
return reverse(String(take!(io)))
end
function format_number2(n::String, delim::Union{Char, S}) where {S <: AbstractString}
len = length(n)
io = IOBuffer()
for (i, c) in enumerate(reverse(n))
print(io, c)
if iszero(mod(i, 3)) && i != len
print(io, delim)
end
end
return String(reverse(take!(io)))
end
function format_number3(n::String, delim::Union{Char, S}) where {S <: AbstractString}
len = length(n)
io = IOBuffer()
for (i, c) in enumerate(n)
print(io, c)
if iszero(mod(len - i, 3)) && i != len
print(io, ',')
end
end
return String(take!(io))
end
for i in 1:3
fname = Symbol("format_number$i")
@eval $fname(n::T, delim::Union{Char, S}) where {T <: Integer, S <: AbstractString} = $fname(string(n), delim)
@eval $fname(n::T) where {T <: Integer} = $fname(n, ',')
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment