ruby-on-rails - 将字符串 "2½"(两个半)转换为 2.5

标签 ruby-on-rails ruby string character-encoding floating-point

现在我正在构建一个从电子表格导入数据的小应用程序,由于原始条目的性质,有一个正在读取的字符串具有 8½、2½ 等值。

例如,我使用简单函数的目标是将 2½ 转换为 float 2.5。

我已经尝试过 .to_f 方法,但它给我留下了一个奇怪的值 2.02½。

如有任何见解或建议,我们将不胜感激!

最佳答案

Unicode 只支持 small number of vulgar fractions所以一个简单的查找表就可以解决问题:

# You might want to double check this mapping
vulgar_to_float = {
    "\u00BC" => 1.0 / 4.0,
    "\u00BD" => 1.0 / 2.0,
    "\u00BE" => 3.0 / 4.0,
    "\u2150" => 1.0 / 7.0,
    "\u2151" => 1.0 / 9.0,
    "\u2152" => 1.0 /10.0,
    "\u2153" => 1.0 / 3.0,
    "\u2154" => 2.0 / 3.0,
    "\u2155" => 1.0 / 5.0,
    "\u2156" => 2.0 / 5.0,
    "\u2157" => 3.0 / 5.0,
    "\u2158" => 4.0 / 5.0,
    "\u2159" => 1.0 / 6.0,
    "\u215A" => 5.0 / 6.0,
    "\u215B" => 1.0 / 8.0,
    "\u215C" => 3.0 / 8.0,
    "\u215D" => 5.0 / 8.0,
    "\u215E" => 7.0 / 8.0,
    "\u2189" => 0.0 / 3.0,
}

然后,一些正则表达式的争论将你的“数字”分开:

s = "2½"
_, int_part, vulgar_part = *s.match(/(\d+)?(\D+)?/)

最后,将它们放在一起,注意正确处理来自正则表达式的可能的 nil:

float_version = int_part.to_i + vulgar_to_float[vulgar_part].to_f

请记住,nil.to_i0nil.to_f0.0

关于ruby-on-rails - 将字符串 "2½"(两个半)转换为 2.5,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9051560/

相关文章:

ruby-on-rails - ActiveRecord 嵌套数组

ruby-on-rails - rspec 和 recaptcha

ruby - 按字符在 Ruby 字符串中的位置匹配字符

c - 为什么我的程序没有将字符串 a 的内容复制到字符串 b ?相反,它打印一些垃圾值

ruby-on-rails - 无法使用 Mailer 在 Rails 中发送链接

css - 在我的 Mac 上全局安装 SASS 时出错

ruby-on-rails - 删除数组中的最后 2 个元素 - Ruby

ruby - 如何将正则表达式作为参数传递给函数?

c# - 在 C# 中处理来自串行线路的文本

ios - RestKit 崩溃是因为 NSManagedObjectContext 在 RKResponseMapperOperation 中为 nil