【问题标题】:How to convert a string to a number (float) in Perl如何在 Perl 中将字符串转换为数字(浮点数)
【发布时间】:2012-05-21 22:16:51
【问题描述】:

如何在 Perl 中将字符串转换为数字?

例子:

$str = '10.0500000';
$number = $str * 1;  # 10.05

是否有另一种标准方法可以从 '10.0500000' 得到 10.05 而不是乘以 1?

【问题讨论】:

  • @Jessada 。这没用。它没有谈到如何转换。
  • @Hindol int() 将给出整数值 ...int(10.05000) = 10
  • 10.0500000 作为数字有什么问题?对于所有数字使用,它与 10.05 相同,如果用作字符串,则仅不同

标签: perl


【解决方案1】:

编辑 2020:答案错误,请参阅下面的评论。我无权删除已接受的答案。


我正在回答字面问题。或许您想format the number 进行展示。

两种表达方式

sprintf '%.2f', '10.0500000'
sprintf '%.2f', 10.0500000

返回字符串10.05

【讨论】:

  • 我不明白这是如何回答这个问题的。该问题询问如何将字符串转换为浮点数,而不是相反。
  • 你说得对,我搞砸了。稍后会删除。
【解决方案2】:

在 Perl 中,标量没有类型。相反,运营商是。因此,当您执行$a . "1" 时,您使用$a 作为字符串,而当您执行$a + 1 时,您使用$a 作为数字。 Perl 将尽最大努力弄清楚标量对于给定操作的含义。因此,在大多数情况下,“转换”是为您隐式完成的。

如果您需要验证您的字符串确实可以转换,请使用正则表达式。

这里有一篇关于如何做到这一点的论述:http://www.regular-expressions.info/floatingpoint.html

【讨论】:

【解决方案3】:

嗯,你也可以加 0 :-)

您不应该太在意 Perl 中标量的内部表示,除非您正在做一些奇怪的事情(如果您在意,请告诉我们)。看起来像数字的东西就是数字。

或者您是否需要检查字符串是否为“真实”数字?好吧,实际上,任何字符串都是。有个 好文章Is it a Number 关于这个话题。该链接指向Wayback Machine,因为原件已从perl.com 中删除。

【讨论】:

  • 链接已损坏 (404)。
  • 一个用例是确保您的 JSON 序列化结果是数字而不是字符串。
【解决方案4】:

0+ 更习惯用语。它通常用于区分对偶变量的组成部分。

$ perl -E'
   system({ "nonexistant" } "nonexistant");
   say 0+$!, ": ", $!;
'
2: No such file or directory

这看起来很奇怪,因为这不是您通常必须做的事情。一个数字就是一个数字,无论它在内部存储为 PV、IV、UV 还是 NV。不必强制将其存储为 NV(浮点数),这通常表明其他地方的设计存在错误。

【讨论】:

    猜你喜欢
    • 2021-03-10
    • 2011-01-02
    • 2011-11-25
    • 1970-01-01
    • 2018-02-15
    • 2011-12-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多