Числа с плавающей запятой
Функции для работы с числами с плавающей запятой.
Обзор
Типы
- precision_range()
Функции
- ceil(число, точность \\ 0)
-
Округляет число с плавающей запятой до наименьшего целого числа, большего или равного
num - floor(число, точность \\ 0)
-
Округляет число с плавающей запятой до наибольшего целого числа, меньшего или равного
num - parse(бинарное)
-
Парсит бинарное представление в число с плавающей запятой
- ratio(число с плавающей запятой)
-
Возвращает пару целых чисел, отношение которых точно равно исходному числу с плавающей запятой и с положительным знаменателем
- round(число с плавающей запятой, точность \\ 0)
-
Округляет число с плавающей запятой до заданного числа знаков после запятой (от 0 до 15)
- to_charlist(число с плавающей запятой)
-
Возвращает строку символов, которая соответствует текстовому представлению заданного числа с плавающей запятой
- to_string(число с плавающей запятой)
-
Возвращает бинарное представление текстового представления заданного числа с плавающей запятой
Типы
precision_range()
precision_range() :: 0..15
Функции
ceil(число, точность \\ 0)
ceil(float(), precision_range()) :: 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(), precision_range()) :: 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(), precision_range()) :: 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.5.3/Float.html