【问题标题】:Convert float to int in Julia Lang在 Julia Lang 中将 float 转换为 int
【发布时间】: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/…

标签: floating-point int julia


【解决方案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
          

          【讨论】:

          【解决方案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更准确
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-07-24
          • 2017-09-04
          • 1970-01-01
          • 2012-05-05
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多