如何在 Perl 中将字符串转换为数字?
例子:
$str = '10.0500000';
$number = $str * 1; # 10.05
是否有另一种标准方法可以从 '10.0500000' 获得 10.05 而不是乘以 1?
如何在 Perl 中将字符串转换为数字?
例子:
$str = '10.0500000';
$number = $str * 1; # 10.05
是否有另一种标准方法可以从 '10.0500000' 获得 10.05 而不是乘以 1?
编辑 2020:答案是错误的,请参阅下面的评论。我无权删除已接受的答案。
我正在回答字面问题。也许您想格式化数字以供显示。
两种表达方式
sprintf '%.2f', '10.0500000'
sprintf '%.2f', 10.0500000
返回字符串10.05
。
在 Perl 中,标量没有类型。相反,运营商是。因此,当您$a . "1"
使用时,您将$a
其用作字符串,而当您$a + 1
使用时,则将$a
其用作数字。Perl 将尽最大努力弄清楚标量对于给定操作的含义。因此,在大多数情况下,“转换”是为您隐式完成的。
如果您需要验证您的字符串确实可以转换,请使用正则表达式。
这是关于如何做到这一点的一篇论述:http ://www.regular-expressions.info/floatingpoint.html
好吧,您也可以添加 0 :-)
你不应该太在意 Perl 中标量的内部表示,除非你在做一些奇怪的事情(如果你在做,请告诉我们)。任何看起来像数字的东西都是数字。
还是您需要检查字符串是否为“真实”数字?好吧,实际上,任何字符串都是。有一篇不错的文章Is it a Number
on this topic。该链接指向Wayback Machine,因为原件已从perl.com
.
0+
有点惯用语。它通常用于区分对偶变量的组件。
$ perl -E'
system({ "nonexistant" } "nonexistant");
say 0+$!, ": ", $!;
'
2: No such file or directory
这看起来很奇怪,因为这不是您通常必须做的事情。数字是一个数字,无论它在内部存储为 PV、IV、UV 还是 NV。没有必要强制将其存储为 NV(浮点数),并且通常表明其他地方的设计存在错误。