如何在ruby中实现atof(ascii to float)方法?

时间:2014-07-04 23:11:03

标签: ruby atoi atof

我正在尝试制作一个RPN计算器。我必须实现自己的.to_i和.to_f方法。我不能使用send,eval,Float(str)或String(str)方法。分配已完成,但我仍然想知道如何实现它。

输入:atof(" 255.25")作为字符串类型
输出:255.55作为浮点类型

这是atoi的代码

  

ASCII_NUM_START = 48#ascii代码的开始为0

     

def ascii_to_i(int_as_str)

     
    

array_ascii = int_as_str.bytes
      converted_arr = array_ascii.map {| ascii | ascii - ASCII_NUM_START}
      converted_arr.inject {| sum,n |总和* 10 + n}
     结束

  
     

def ascii_to_f(float_as_str)
   ???
    端

2 个答案:

答案 0 :(得分:1)

我让它正在执行以下操作(并使用您的ascii_to_i功能)。

ASCII_NUM_START = 48 # start of ascii code for 0 


def ascii_to_i(int_as_str) 

  array_ascii = int_as_str.bytes 
  converted_arr = array_ascii.map {|ascii| ascii - ASCII_NUM_START } 
  converted_arr.inject { |sum, n| sum * 10 + n } 
end 

def ascii_to_f(float_as_str) 
  int_split = float_as_str.split(".")
  results = []
  int_split.each { |val| results << ascii_to_i(val) }
  results[0] + (results[1] / (10.0 ** int_split.last.length))
end

答案 1 :(得分:0)

我可以看到你在ascii_to_i做了一个合理的努力。

ascii_to_f的代码可能类似,此外,您需要将结果除以已处理的小数位数。

最容易适应的可能是:

  • .中找到String字符(ASCII代码46)的位置,将其另存为变量
  • 从字节数组中删除.字符(ASCII代码46)
  • 从之前的字节数组计算Integer值
  • 除以10.0(必须是Float)的幂(剩余数组的长度减去您找到.的位置)。

我不提供代码,因为它是一项任务。看看你是否可以找出正确的语法,查看Array类的文档以查找特定值的位置,删除特定值以及获取数组的长度。