在 Julia Lang 中将 float 转换为 int
Posted
技术标签:
【中文标题】在 Julia Lang 中将 float 转换为 int【英文标题】:Convert float to int in Julia Lang 【发布时间】:2017-03-24 00:57:56 【问题描述】:有没有办法在 Julia 中将浮点数转换为 int?我正在尝试将浮点数转换为固定精度数,小数部分表示为 8 位整数。为了做到这一点,我只需要截断数字的小数部分,我认为最好的方法是从浮点 x 中减去转换后的 x 整数:
x = 1.23455
y = x - Int(x)
println(y)
y = 0.23455
【问题讨论】:
您提供的代码不起作用,因为Int(x)
将返回Inexact error
,除非x
是表示为Float64
的整数,例如1.0
或 -44.0
。另外,根据这个问题,我无法判断您实际上在追求什么。您的措辞听起来像是您想要Float64
的小数部分,表示为Int8
。这是正确的吗?这是一个奇怪的要求,特别是考虑到您的示例编号 1.23455
,Int64
的小数部分是 23455
,但这显然 太多 太大而无法表示为 @987654334 @.
另外,您似乎可以使用舍入函数。所有这些函数都接受目标类型进行转换:docs.julialang.org/en/release-0.5/manual/…
【参考方案1】:
看来你真的需要modf
:
help?> modf
search: modf ComposedFunction mod1 mod module
modf(x)
Return a tuple (fpart, ipart) of the
fractional and integral parts of a number.
Both parts have the same sign as the argument.
Examples
≡≡≡≡≡≡≡≡≡≡
julia> modf(3.5)
(0.5, 3.0)
julia> modf(-3.5)
(-0.5, -3.0)
【讨论】:
【参考方案2】:结合前面的答案:
julia> int(x) = floor(Int, x)
int (generic function with 1 method)
julia> int(3.14)
3
julia> int(3.94)
3
【讨论】:
【参考方案3】:看来你真正需要的是数字的小数部分。如果是这种情况,您可以像这样直接使用模1:
x = 1.23455
y = x % 1
println(y)
# 0.2345
【讨论】:
【参考方案4】:根据floor
docs
你可以这样做
julia> x = 45.5
45.5
julia> typeof(x)
Float64
julia> x = floor(Int8,x)
45
julia> typeof(x)
Int8
【讨论】:
【参考方案5】:为了回答标题中的一般问题(将Float转换为Int),我更喜欢四舍五入,然后转换为Int:
convert(Int64, round(1.3, digits=0))
# 1
convert(Int64, round(1.7, digits=0))
# 2
【讨论】:
建议使用别名Int
,而不是明确说明整数的大小,见docs.julialang.org/en/v1/manual/types/#Type-Aliases-1
我很抱歉,但不是为什么要round(Int64, 1.3)
代替?它更简洁?添加显式转换的目的是什么?【参考方案6】:
您可能正在寻找trunc
。这取决于小数部分的含义。这就是trunc
和floor
的区别:
julia> trunc(Int, 1.2)
1
julia> trunc(Int, -1.2)
-1
julia> floor(Int, 1.2)
1
julia> floor(Int, -1.2)
-2
【讨论】:
trunc
现在返回浮点数,而不是整数。
@karatedog trunc(x::Float64)
总是返回浮点数。但是如果你提供Int
作为第一个参数,就像trunc(Int, 1.2)
一样,你会得到一个整数。【参考方案7】:
我想你在找floor
:
julia> x = 1.23455
1.23455
julia> floor(x)
1.0
julia> y = x - floor(x)
0.23455000000000004
【讨论】:
从 v0.6 开始,请注意floor
的输出不是 Int64
类型,而是 Float64
示例:test = ceil(0.2); typeof(test)
floor(Int,x)
根据docs更准确以上是关于在 Julia Lang 中将 float 转换为 int的主要内容,如果未能解决你的问题,请参考以下文章
无法将 Taylor1Float64 转换为用于绘制 Julia 的系列数据