【问题标题】:Ruby - cant divide with fixnum valuesRuby - 不能用fixnum值除
【发布时间】:2014-03-26 09:15:27
【问题描述】:

我需要通过将两个单独的计数相除来计算一些百分比值。我得到了类的计数值是fixnum。但是当我将它们分开时,无论计数值是多少,它都会向我显示 0,

<% dueTask = 12 %>
<% aT = 16 %>
<%= (dueTask/aT)*.to_f %>

这里最后一个结果显示为 0。

【问题讨论】:

  • 任意一个操作数都应该是float类型,算术运算返回float类型。
  • duetask.to_f/aT => 一些浮点类型的值。

标签: ruby math fixnum


【解决方案1】:

您可以使用两条不同的行来获取实际值。

    <% dueTask = 12 %>
    <% aT = 16 %>
    <% result = dueTask/aT.to_f %>
    <%= result %>

在 IRB 中,您可以通过检查以下内容来获取值:

dueTask = 12
aT = 16
dueTask/aT.to_f

但是当您必须在 HTML 中显示结果时,这种技术可能不起作用。变量为 Fixnum 类型(可以在 IRB shell 中通过以下命令查看)

dueTask.class

输出将是

#=> Fixnum 

【讨论】:

  • ,谢谢兄弟,我找到了解决方案。问题是我需要将 fixnum 转换为 float。
  • 这有点误导。在您的情况下,您将 Fixnum 除以 Float。
  • @CedricH。任何一个操作数都应该是浮点型,算术运算返回浮点型。答案没有误导性。
  • @AlokAnand 我不明白这与我的言论有何关系。我们都明白这一点。尽管如此,您的答案仍然非常不清楚:如果第一个块有效,您没有解释原因,并且您的最后一句话不像您最后的评论那么清楚。
  • @CedricH。无论如何,a.to_f.class=> Float,所以我说任何一个操作数都应该是浮点类型,以便在算术运算中获得浮点类型的结果。如果任何一个操作数比 Fixnum 宽,则涉及该操作数的算术运算的结果比 Fixnum 宽。
【解决方案2】:

您应该在除法之前将它们转换为浮点数:

(dueTask.to_f/aT.to_f)

否则,您将只得到除法的整数部分,在本例中为 0

【讨论】:

    【解决方案3】:

    除法的方式是整数,所以结果是整数。即使您将其转换为浮点数,您也只需转换结果(在这种情况下为 0)。

    所以你需要将两个整数中的至少一个转换为浮点数:

    <% dueTask = 12 %> 
    <% aT = 16 %> 
    <%= (dueTask.to_f/aT) %>
    

    【讨论】:

      【解决方案4】:

      现在您得到了该除法 0 的正确答案,因为您将 2 个用作整数的数字相除,因此您将得到一个整数答案。

      要从除法中获得十进制答案,您需要将它们转换为浮点数,然后进行除法。

      dueTask.to_f/aT.to_f
      

      你的代码最终会是这样的:

      <% dueTask = 12 %>
      <% aT = 16 %>
      <%= (dueTask.to_f/aT.to_f) %>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-10-10
        • 1970-01-01
        • 1970-01-01
        • 2010-10-17
        • 1970-01-01
        • 2011-08-07
        • 2012-09-28
        相关资源
        最近更新 更多