浮点型 | 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+308
,ArgumentError
引发异常。
如果你想直接将一个字符串格式的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"