Как преобразовать десятичное число, чтобы оно стало целым числом? - PullRequest
0 голосов
/ 26 августа 2018

Я использую библиотеку Decimal.

Если у меня есть с плавающей запятой Десятичное число:

pry(4)> a1
#Decimal<179.4>

, как я могу преобразовать в десятичное целое число или целое число эликсира?Думаю, мне стоит использовать раунд.

pry(5)>  Decimal.round a1, 2
#Decimal<179.40>  # <--- still float

Но это не сработает.

Я хочу иметь возможность выбирать: округлять его вверх или вниз.То есть 179 или 180.

Мне известно о

Decimal.set_context(%Decimal.Context{Decimal.get_context | rounding: :floor})

, но я не знаю, как его здесь применить.

1 Ответ

0 голосов
/ 26 августа 2018

Decimal.round/3 принимает mode в качестве третьего параметра. Здесь вам не нужен контекст, если только вы не хотите применить ко всему одинаковый контекст округления.

dec = Decimal.from_float(3.14)
dec |> Decimal.round() |> Decimal.to_integer()
#⇒ 3
dec |> Decimal.round(0, :down) |> Decimal.to_integer()
#⇒ 3
dec |> Decimal.round(0, :up) |> Decimal.to_integer()
#⇒ 4

Список доступных режимов можно найти в документации по Decimal.Context.

...