如何解决我正在尝试对e药中的输入数据执行数学运算,但会引发算术错误
我不老长生不老药,在这种情况下,我试图对接收到的数据执行数学运算,计算从用户那里获得的工资的十分之一,并抛出该错误:
** (ArithmeticError) bad argument in arithmetic expression
m.ex:11: M.calc/0*
这是我的代码
def calc do
salary = IO.gets("What is your salary?") |> String.trim
x = salary
IO.puts "Your tithe this month is: #{(x * 0.01)}"
end
解决方法
出现此错误的原因是IO.gets
将为您提供二进制文件(例如字符串)。您可以使用IO.inspect(salary)
它可能会产生类似
的信息 "1000\n"
因此,您可能需要删除\n
,然后进行解析。您可以使用String.replace/4
您可能还需要删除其中包含的所有特殊字符(例如$
)。
然后,当您拥有数字本身时,可以使用String.to_integer/1
或String.to_float/1
来解析数字,具体取决于您期望的是整数还是浮点值。
基本工作版本可能是:
defmodule M do
def main do
calc()
end
def calc do
salary =
IO.gets("What is your salary?")
|> String.trim()
|> String.replace("\n","")
|> String.to_integer()
IO.puts "Your tithe this month is: #{salary * 0.01}"
end
end
假定数字将始终是整数。但是,当然,您可以添加更多逻辑来说明这两者。
您也可以改用Integer.parse/2
和Float.parse
,这可能有助于删除其他字符,例如:
defmodule M do
def main do
calc()
end
def calc do
{salary,_other_chars} =
IO.gets("What is your salary?")
|> Float.parse()
IO.puts "Your tithe this month is: #{salary * 0.01}"
end
end
这可能是一个更好,更通用的函数,但它将始终产生浮点数
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。