Плавающая точка
Функции для работы с числами с плавающей запятой.
Обзор
Функции
- ceil(число, точность \\ 0)
-
Округляет число с плавающей запятой до наименьшего целого числа, большего или равного
num - floor(число, точность \\ 0)
-
Округляет число с плавающей запятой до наибольшего целого числа, меньшего или равного
num - parse(двоичное)
-
Парсит двоичное представление в число с плавающей запятой
- ratio(число с плавающей запятой)
-
Возвращает пару целых чисел, отношение которых точно равно исходному числу с плавающей запятой и с положительным знаменателем
- round(число с плавающей запятой, точность \\ 0)
-
Округляет число с плавающей запятой до произвольного числа знаков после запятой (от 0 до 15)
- to_charlist(число с плавающей запятой)
-
Возвращает строку символов, соответствующую текстовому представлению заданного числа с плавающей запятой
- to_string(число с плавающей запятой)
-
Возвращает двоичное представление текстового представления заданного числа с плавающей запятой
Функции
ceil(число, точность \\ 0)
ceil(float(), 0..15) :: float()
Округляет число с плавающей запятой до наименьшего целого числа, большего или равного num.
ceil/2 также принимает точность для округления числа с плавающей запятой до произвольного числа знаков после запятой (от 0 до 15).
Операция выполняется над двоичным представлением числа с плавающей запятой, без преобразования в десятичное.
Поведение ceil/2 для чисел с плавающей запятой может быть неожиданным. Например:
iex> Float.ceil(-12.52, 2) -12.51
Можно было ожидать округления до -12.52. Это не ошибка. Большинство десятичных дробей не могут быть представлены как двоичные числа с плавающей запятой, и поэтому число выше представлено внутри как -12.51999999, что объясняет указанное поведение.
Эта функция всегда возвращает числа с плавающей запятой. Kernel.trunc/1 можно использовать вместо этого для усечения результата до целого числа.
Примеры
iex> Float.ceil(34.25) 35.0 iex> Float.ceil(-56.5) -56.0 iex> Float.ceil(34.251, 2) 34.26
floor(число, точность \\ 0)
floor(float(), 0..15) :: float()
Округляет число с плавающей запятой до наибольшего целого числа, меньшего или равного num.
floor/2 также принимает точность для округления числа с плавающей запятой до произвольного числа знаков после запятой (от 0 до 15). Операция выполняется над двоичным представлением числа с плавающей запятой, без преобразования в десятичное.
Поведение floor/2 для чисел с плавающей запятой может быть неожиданным. Например:
iex> Float.floor(12.52, 2) 12.51
Можно было ожидать округления до 12.52. Это не ошибка. Большинство десятичных дробей не могут быть представлены как двоичные числа с плавающей запятой, и поэтому число выше представлено внутри как 12.51999999, что объясняет указанное поведение.
Эта функция всегда возвращает число с плавающей запятой. Kernel.trunc/1 можно использовать вместо этого для усечения результата до целого числа.
Примеры
iex> Float.floor(34.25) 34.0 iex> Float.floor(-56.5) -57.0 iex> Float.floor(34.259, 2) 34.25
parse(двоичное)
parse(binary()) :: {float(), binary()} | :error Парсит двоичное представление в число с плавающей запятой.
При успешном выполнении возвращает кортеж в формате {float, remainder_of_binary}; когда двоичное представление не может быть преобразовано в действительное число с плавающей запятой, возвращается атом :error
Если размер числа с плавающей запятой превышает максимальный размер 1.7976931348623157e+308, возникает исключение ArgumentError.
Если требуется преобразовать строковое представление числа с плавающей запятой непосредственно в число с плавающей запятой, можно использовать String.to_float/1.
Примеры
iex> Float.parse("34")
{34.0, ""}
iex> Float.parse("34.25")
{34.25, ""}
iex> Float.parse("56.5xyz")
{56.5, "xyz"}
iex> Float.parse("pi")
:error ratio(число с плавающей запятой)
Возвращает пару целых чисел, отношение которых точно равно исходному числу с плавающей запятой и с положительным знаменателем.
Примеры
iex> Float.ratio(3.14)
{7070651414971679, 2251799813685248}
iex> Float.ratio(-3.14)
{-7070651414971679, 2251799813685248}
iex> Float.ratio(1.5)
{3, 2}
iex> Float.ratio(-1.5)
{-3, 2}
iex> Float.ratio(16.0)
{16, 1}
iex> Float.ratio(-16.0)
{-16, 1} round(число с плавающей запятой, точность \\ 0)
round(float(), 0..15) :: float()
Округляет число с плавающей запятой до произвольного числа знаков после запятой (от 0 до 15).
Направление округления всегда к ближайшему большему значению при равенстве. Операция выполняется над двоичным представлением числа с плавающей запятой, без преобразования в десятичное.
Функция принимает только числа с плавающей запятой и всегда возвращает число с плавающей запятой. Используйте Kernel.round/1, если вам нужна функция, которая принимает как числа с плавающей запятой, так и целые числа и всегда возвращает целое число.
Поведение round/2 для чисел с плавающей запятой может быть неожиданным. Например:
iex> Float.round(5.5675, 3) 5.567
Можно было ожидать округления до 5.568. Это не ошибка. Большинство десятичных дробей не могут быть представлены как двоичные числа с плавающей запятой, и поэтому число выше представлено внутри как 5.567499999, что объясняет указанное поведение. Если вам нужно точное округление для десятичных дробей, необходимо использовать библиотеку для десятичных чисел. Указанное поведение также соответствует эталонным реализациям, таким как «Correctly Rounded Binary-Decimal and Decimal-Binary Conversions» Дэвида М. Гея.
Примеры
iex> Float.round(12.5) 13.0 iex> Float.round(5.5674, 3) 5.567 iex> Float.round(5.5675, 3) 5.567 iex> Float.round(-5.5674, 3) -5.567 iex> Float.round(-5.5675) -6.0 iex> Float.round(12.341444444444441, 15) 12.341444444444441
to_charlist(число с плавающей запятой)
to_charlist(float()) :: charlist()
Возвращает строку символов, соответствующую текстовому представлению заданного числа с плавающей запятой.
Используется кратчайшее представление в соответствии с алгоритмом, описанным в «Printing Floating-Point Numbers Quickly and Accurately» в Proceedings of the SIGPLAN ‘96 Conference on Programming Language Design and Implementation.
Примеры
iex> Float.to_charlist(7.0) '7.0'
to_string(число с плавающей запятой)
to_string(float()) :: String.t()
Возвращает двоичное представление текстового представления заданного числа с плавающей запятой.
Используется кратчайшее представление в соответствии с алгоритмом, описанным в «Printing Floating-Point Numbers Quickly and Accurately» в Proceedings of the SIGPLAN ‘96 Conference on Programming Language Design and Implementation.
Примеры
iex> Float.to_string(7.0) "7.0"
© 2012 Plataformatec
Licensed under the Apache License, Version 2.0.
https://hexdocs.pm/elixir/1.4.5/Float.html