【问题标题】:String can't be coerced into Float for ruby on rails对于 ruby​​ on rails,字符串不能被强制转换为 Float
【发布时间】:2014-02-27 00:56:11
【问题描述】:

我收到这个错误,“String can't be coerced into Float” 执行此行时:

mechanic_dictionary[:cost] = "%.2f" % labor_item.hourly_cost * inv_item.hours_worked

但是当我将这一行修改为:

mechanic_dictionary[:cost] = "%.2f" % 1.0 * 1.0

然后程序正确显示的值是1.00

有人知道我使用 labor_itemsinv_items 对象时为什么会出现错误吗?

注意-我在 rails 上使用 ruby​​

【问题讨论】:

  • 需要更多详细信息 - labor_item.hourly_costinv_item.hours_worked 的值和类型是什么?您可能只需要在这些末尾加上.to_f,但这无法确定。
  • 对象是浮点数。我尝试将 .to_f 放在每个之后,但我仍然收到错误
  • 也许你可以给我们看一个labor_item.hourly_costinv_item.hours_worked的确切值的例子?
  • 当我运行调试器时,这是对象显示的内容 (rdb:1) inv_item.hours_worked #<5af93a8><5af9240>

标签: ruby-on-rails ruby string floating-point


【解决方案1】:

在产品周围加上括号:

"%.2f" % (labor_item.hourly_cost.to_f * inv_item.hours_worked.to_f)

回想一下,ruby 运算符 * /% 具有相同的优先级并且具有从左到右的关联性。

这样做的原因

"%.2f" % 1.0 * 1.0

是因为"1.00" * 1.0 == "1.00"。它首先评估"%.2f" % 1.0

【讨论】:

  • 对不起,我应该提到我确实尝试在对象周围加上括号,但它仍然给我同样的错误
  • @Eric 答案已更新。您是否尝试过使用括号并将.to_f 放在hourly_costhours_worked 上?
  • 是的,我确实尝试过,但仍然遇到同样的问题:(
【解决方案2】:
"%.2f" % ( labor_item.hourly_cost * inv_item.hours_worked )

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-24
    • 2012-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-09-22
    相关资源
    最近更新 更多