Created
September 29, 2021 21:44
-
-
Save jakewilliami/0440a1adbab6131532ddd46b7a4e4076 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# 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