В Юлии, вставьте запятые в целые числа для печати, как Python 3.6+ - PullRequest
0 голосов
/ 07 сентября 2018

Я хочу вставить запятые в большие целые числа для печати. ​​

julia> println(123456789)  # Some kind of flag/feature inserts commas.
"123,456,789"

В Python 3.6+ это легко сделать:

>>> print(f"{123456789:,d}")
123,456,789

Однако, похоже, чтоСтандартные функции Julia print / println имеют эту функцию в настоящее время.Что я могу сделать, используя только функции print / println?

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Полагаю, в некоторых языках самым простым способом было бы использовать модификатор формата ' в printf. Я, Юля, это выглядело бы так:

using Printf # a stdlib that ships with julia which defines @printf
@printf "%'d" 12345678

Однако, к сожалению, этот флаг еще не поддерживается, как видно из полученной ошибки:

julia> @printf "%'d" 12345678
ERROR: LoadError: printf format flag ' not yet supported

Если вам нравится эта функция, возможно, вам следует подумать о добавлении ее в Printf stdlib, чтобы все могли воспользоваться ею. Хотя я не знаю, насколько это будет сложно.

ОБНОВЛЕНИЕ: обратите внимание, что хотя макрос определен в stdlib Printf, вышеприведенная ошибка явно генерируется в Base/printf.jl:48. Я также подал вопрос здесь

0 голосов
/ 07 сентября 2018

Вот функция, основанная на регулярном выражении из «Поваренной книги регулярных выражений» Гойваэрта и Левитана, О'Рейли, 2-е издание, с.402, который вставляет запятые в целые числа, возвращая строку.

function commas(num::Integer)
    str = string(num)
    return replace(str, r"(?<=[0-9])(?=(?:[0-9]{3})+(?![0-9]))" => ",")
end

println(commas(123456789))
println(commas(123))
println(commas(123456789123456789123456789123456789))

""" Output
123,456,789
123
123,456,789,123,456,789,123,456,789,123,456,789
"""
...