首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将字符串(如"5e+24“)转换为整数?

如何将字符串(如"5e+24“)转换为整数?
EN

Stack Overflow用户
提问于 2022-11-14 12:30:39
回答 4查看 111关注 0票数 -3

我有一个外部API,它以下列格式将数字作为字符串返回

代码语言:javascript
复制
5e+24

这意味着一个数字等于5 * 10^24,==> 5,有24个零。

长生不老药有能力将这些数字转换成整数吗?

这种格式到底叫什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2022-11-14 13:05:04

这有时被称为科学符号或E符号。

这些数字可以在Float.parse中从字符串解析为浮动。

代码语言:javascript
复制
iex> Float.parse "3.1e+4" 
{31000.0, ""}
iex> Float.parse "5e+24" 
{5.0e24, ""}

正如您在上一个示例中所看到的,它返回E符号中的数字,但它仍然是可以使用的浮点数。

不过,要注意浮点类型所存在的所有缺陷。例如,如果您试图获得这个数字的一个很好的字符串表示形式,奇怪的事情会发生

代码语言:javascript
复制
{number, _} = Float.parse("5e+24")
Float.to_string number        
# "5.0e24"
:erlang.float_to_binary number
# "5.00000000000000045298e+24"
:erlang.float_to_binary number, decimals: 0 
"5000000000000000452984832"
票数 2
EN

Stack Overflow用户

发布于 2022-11-14 14:04:22

您可以拆分字符串并自己将其相乘:

代码语言:javascript
复制
[a, b] = String.split("5e+24", "e+")
String.to_integer(a) * 10 ** String.to_integer(b)
票数 2
EN

Stack Overflow用户

发布于 2022-11-14 14:20:07

zwippie的回答涉及浮点数,但正如他所提到的,浮标有一些问题。如果您想要一个纯粹的整数解决方案,我就找不到一种现有的方法,可以用科学的表示法将字符串解析为Elixir整数。您必须自己解析整数,例如,使用如下内容:

代码语言:javascript
复制
defmodule BigInteger do
  
  def parse(s) do
    {i, e} = Integer.parse(s)
    e = String.downcase(e)
    if not String.starts_with?(e, "e") do
      {:error, "No  \"e\""}
    else
      e = String.slice(e, 1..-1)
      cond do
        String.starts_with?(e, "+") ->
          {exp, rest} = Integer.parse(String.slice(e, 1..-1))
          if rest != "" do
            IO.inspect(rest)
            {:error, "Not integer after \"e+\""}
          else
            {:ok, i * Integer.pow(10, exp)}
          end
        True ->
          {exp, rest} = Integer.parse(String.slice(e, 0..-1))
          if rest != "" do
            {:error, "Not integer after \"e\""}
          else
            {:ok, i * Integer.pow(10, exp)}
          end
      end
    end
  end
end

IO.inspect(BigInteger.parse("3e+24"))
IO.inspect(BigInteger.parse("4e24"))
IO.inspect(BigInteger.parse("5E24"))
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74431681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档