【问题标题】:sprintf broken in RubyMotionsprintf 在 RubyMotion 中损坏
【发布时间】:2012-05-08 04:36:34
【问题描述】:

Ruby 新手,刚刚安装并安装了 RubyMotion,创建了我的第一个程序,但我无法让 Time(示例)应用程序正常工作。

每当我尝试使用 sprint 或其他形式(抱歉不知道名称)来格式化字符串时,我都会返回我的格式字符串。

即(当我的应用在模拟器中运行时从控制台)

Build ./build/iPhoneSimulator-5.1-Development
Simulate ./build/iPhoneSimulator-5.1-Development/Timer.app
(main)>> @time = 0.1
=> 0.0999999940395355
(main)>> string = sprintf("%.1f", @time)
=> "%.1f"
(main)>> string
=> "%.1f"
(main)>> "%.1f" % @time 
=> "%.1f"
(main)>> 

在模拟器中实际应用的结果相同。

我的 Mac 上确实安装了默认 ruby​​,但如果我尝试运行测试 ruby​​ 文件(打印“%05d”% 123),我会得到预期的结果。

/usr/bin/ruby -v 
ruby 1.8.7 (2010-01-10 patchlevel 249) [universal-darwin11.0]
/Library/RubyMotion/bin/ruby -v
MacRuby 0.12 (ruby 1.9.2) [universal-darwin11.0, i386]

在 Lion 10.7.3 上运行,感谢任何建议或想法。

谢谢。

【问题讨论】:

  • 这似乎是 RubyMotion 的一个错误;并且NSString.stringWithFormat 方法也无法正常运行(NSString.stringWithFormat("%0.1f", 0.1) 返回"0.0")。我正在提交支持票。
  • 另外,我认为这是 RubyMotion 1.1 或 1.2 的回归;当我在 1.0 上运行 Locations 示例应用程序时,它显示的坐标很好,但现在运行它只会在屏幕上打印“%0.3f,%0.3f”。还有一个issue opened on Github
  • 已修复。 sudo motion update 获取更新。

标签: ruby rubymotion


【解决方案1】:

截至 2012 年 5 月 9 日,此问题已得到修复。确保您使用的是 RubyMotion 1.3(运行 sudo motion update),字符串格式将再次起作用。

2012 年 5 月 8 日更新:Confirmed bug,应该在今晚或明天修复。

根据我上面的 cmets,这肯定有一个错误。一个丑陋的黑客让这个工作可能是这样的(因为%d 仍然适用于sprintf):

@time = 0.1
sprintf("%d", (@time * 10).round).insert(-2, '.')

【讨论】:

  • 我在这个上午运行了“sudo motion update”,它将 RubyMotion 更新到 1.3,再次运行我的测试,一切似乎都正常。
猜你喜欢
  • 2013-04-21
  • 2016-10-21
  • 2011-10-07
  • 1970-01-01
  • 1970-01-01
  • 2022-11-23
  • 1970-01-01
  • 2016-05-16
  • 2017-02-24
相关资源
最近更新 更多