现在,我正在构建一个小型应用程序,该程序可以从电子表格中导入数据,并且由于原始条目的性质,正在读取的字符串的值例如为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/

10-10 23:04