在Phoenix Framework中为分号添加分隔符

问题描述 投票:2回答:2

所以,假设我有一个像123456789这样的数字,我想把它转换为字符串并将其表示为123,456,789123 456 789等。这样做的最佳方法是什么?

elixir phoenix-framework
2个回答
5
投票

我不认为有内置的方式。对于一般格式,你可以使用:io.format/2这是一种方法:

123456789
|> Integer.to_char_list
|> Enum.reverse
|> Enum.chunk(3, 3, [])
|> Enum.join(",")
|> String.reverse

# "123,456,789"

0
投票
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"
© www.soinside.com 2019 - 2024. All rights reserved.