如何在Perl中将字符串转换为数字(浮点)

如何在Perl中将字符串转换为数字(浮点),perl,Perl,如何在Perl中将字符串转换为数字 例如: $str = '10.0500000'; $number = $str * 1; # 10.05 有没有其他标准方法可以从“10.0500000”中得到10.05而不是与1相乘?好的,您也可以添加0:-) 您不应该太在意Perl中标量的内部表示,除非您正在做一些奇怪的事情(如果是,请告诉我们)。任何看起来像数字的东西都是数字 或者需要检查字符串是否为“实数”吗?实际上,任何字符串都是。有一个 好文章 关于这个话题。该链接指向Wayback机器,因为

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

例如:

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

有没有其他标准方法可以从“10.0500000”中得到10.05而不是与1相乘?

好的,您也可以添加0:-)

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

或者需要检查字符串是否为“实数”吗?实际上,任何字符串都是。有一个 好文章
关于这个话题。该链接指向Wayback机器,因为原始文件已从
perl.com

中删除。在perl中,标量不是键入的。取而代之的是运营商。所以当你做
$a。“1”
使用
$a
作为字符串,执行
$a+1
时使用
$a
作为数字。Perl将尽最大努力找出标量对于给定操作的意义。因此,在大多数情况下,“转换”是为您隐式完成的

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


这里有一篇关于如何做到这一点的论述:

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


我回答的是字面上的问题。也许你想展示一下

两句话

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

返回字符串
10.05

0+
更为惯用。它通常用于区分DualVar的组件

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

这看起来很奇怪,因为这不是你通常必须做的事情。数字是一个数字,无论它是作为PV、IV、UV还是NV存储在内部。强制将其存储为NV(float)应该是没有必要的,而且它通常表示其他地方有童车设计。

你看过吗?@Jessada。这没用。它没有谈到如何转换。@Hindol int()将给出整数值…int(10.05000)=10 10.0500000作为一个数字有什么问题?对于所有数字用途,它与10.05相同。如果用作字符串,它会有所不同。使用正则表达式检测数字是Perl常见问题解答:@daxim:Ah,谢谢。我知道必须有一个更好的来源:)链接断开了(404)。这种情况的一个用例是确保JSON序列化结果是一个数字而不是一个字符串。我不知道这如何回答这个问题。问题是如何将字符串转换为float,而不是反过来。你是对的,我搞砸了。稍后将删除。