在 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.23455Int64 的小数部分是 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】:

根据floordocs 你可以这样做

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。这取决于小数部分的含义。这就是truncfloor的区别:

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 的系列数据

如何在 Julia 中将 JSON 字符串转换为多个结构

在Julia时间将数据类型UInt64更改为Float

我收到消息:无法在分配中将 'float' 转换为 'float*' 并且我有一些逻辑错误

Julia - 分数

如何在 Swift 中将 Floats 的 ContiguousArray 转换为字节数组?