所以,假设我有一个像123456789
这样的数字,我想把它转换为字符串并将其表示为123,456,789
或123 456 789
等。这样做的最佳方法是什么?
我不认为有内置的方式。对于一般格式,你可以使用:io.format/2
这是一种方法:
123456789
|> Integer.to_char_list
|> Enum.reverse
|> Enum.chunk(3, 3, [])
|> Enum.join(",")
|> String.reverse
# "123,456,789"
defmodule Formatter do
@doc false
defp format_number_string(string, join, delimer) do
string
|> String.split(delimer)
|> hd()
|> String.split("", trim: true)
|> Enum.reverse()
|> Enum.chunk_every(3, 3, [])
|> Enum.map(&(Enum.join(Enum.reverse(&1))))
|> Enum.reverse()
|> Enum.join(join)
end
@doc false
def format_number(number, join \\ " ", delimer \\ ".") do
case number do
number when is_integer(number) ->
format_number_string(Integer.to_string(number), join, delimer)
number when is_float(number) ->
format_number_string(Float.to_string(number), join, delimer)
number when is_binary(number) ->
format_number_string(number, join, delimer)
_ ->
number
end
end
end
# examples:
IO.inspect Formatter.format_number(120454787.257, ".") # "120.454.787"
IO.inspect Formatter.format_number(120454787.257) # "120 454 787"