非常教程

Elixir 1.5参考手册

浮点型 | Float

浮点型 | Float

处理浮点数的函数。

类型

precision_range()

功能

ceil(number, precision\ 0)

将浮点数舍入为大于或等于的最小整数 num

floor(number, precision \ 0)

将浮点数舍入为小于或等于的最大整数 num

parse(binary)

将二进制文件解析为浮点数。

ratio(float)

返回一对整数,其比率与原始浮点数完全相等,并且具有正数分母。

round(float, precision \ 0)

将浮点值舍入为任意数量的小数位(0到15之间)

to_charlist(float)

返回与给定float的文本表示相对应的charlist

to_string(float)

返回一个二进制文件,该二进制文件对应于给定浮点数的文本表示形式。

precision_range()

precision_range() :: 0..15

ceil(number, precision \ 0)

ceil(float, precision_range) :: float

将浮点数舍入大于或等于num...

ceil/2还接受一个精度,使浮点值在0到15%29之间降到任意小数的百分比28。

该操作是在二进制浮点数上执行的,不需要转换为十进制。

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(number, precision \ 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(binary)

parse(binary) :: {float, binary} | :error

将二进制文件解析为浮点数。

如果成功,则返回一个形式为的元组{float, remainder_of_binary}; 当二进制不能强制为有效的浮点数时,原子:error被返回。

如果浮动的大小超过1.7976931348623157e+308ArgumentError引发异常。

如果你想直接将一个字符串格式的float转换为一个float,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(float)

返回一对整数,其比率与原始浮点数完全相等,并具有正分母。

实例

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(float, precision \ 0)

round(float, precision_range) :: float

在0到15%29之间,将浮点值舍入任意小数位数%28.

四舍五入的方向总是和一半的方向联系在一起的。该操作是在二进制浮点数上执行的,不需要转换为十进制。

这个函数只接受浮点数并且总是返回一个浮点数。使用Kernel.round/1,如果你想接受两个浮点数和整数,始终返回一个整数的函数。

round/2的行为可能令人惊讶。例如:

iex> Float.round(5.5675, 3)
5.567

人们可能预计它将涨至5.568的一半。这不是一个错误。大多数小数不能表示为二进制浮点数,因此上面的数字在内部表示为5.567499999,这解释了上述行为。如果您想对小数进行精确舍入,则必须使用小数点库。上面的行为也符合参考实现,例如David M.Gay所着的“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(float

to_charlist(float) :: charlist

返回与给定float的文本表示相对应的charlist。

它根据SIGPLAN '96关于编程语言设计和实现会议论文集“快速准确地打印浮点数”中描述的算法使用最短表示法。

实例

iex> Float.to_charlist(7.0)
'7.0'

to_string(float)

to_string(float) :: String.t

返回一个二进制文件,它对应于给定浮点数的文本表示形式。

它根据SIGPLAN '96关于编程语言设计和实现会议论文集“快速准确地打印浮点数”中描述的算法使用最短表示法。

实例

iex> Float.to_string(7.0)
"7.0"
浮点型 | Float
浮点型 | Float 详细