我正在尝试制作一个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)
???
端
答案 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)10.0
(必须是Float
)的幂(剩余数组的长度减去您找到.
的位置)。我不提供代码,因为它是一项任务。看看你是否可以找出正确的语法,查看Array
类的文档以查找特定值的位置,删除特定值以及获取数组的长度。