1

我正在尝试制作一个 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
转换_arr = array_ascii.map {|ascii| ascii - ASCII_NUM_START } convert_arr.inject
{ |sum, n| 总和 * 10 + n }
结束

def ascii_to_f(float_as_str)
???
结尾

4

2 回答 2

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
于 2014-07-05T13:38:00.170 回答
0

我可以看到你已经做出了合理的努力ascii_to_i

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

可能最简单的适应是:

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

我没有给出代码,因为它是一个任务。看看你是否能找出正确的语法,查看Array类的文档以查找特定值的位置、删除特定值以及获取数组的长度。

于 2014-07-05T06:52:07.503 回答