如何在Perl中将字符串转换为数字?
示例:
$str = '10.0500000';
$number = $str * 1; # 10.05
还有另一种标准方法可以从'10 .0500000'获得10.05而不是乘以一个吗?
答案 0 :(得分:12)
我正在回答字面问题。也许你想要format the number来展示。
两个表达式
sprintf '%.2f', '10.0500000'
sprintf '%.2f', 10.0500000
返回字符串10.05
。
答案 1 :(得分:8)
在Perl中,标量不是键入的。相反,运营商是。因此,当您执行$a . "1"
时,您使用$a
作为字符串,当您执行$a + 1
时,您使用$a
作为数字。 Perl将尽力弄清楚标量对于给定操作的意义。因此,对于大多数情况,“转换”是为您隐式完成的。
如果您需要确认您的字符串确实可以转换,请使用正则表达式。
以下是关于如何做到这一点的一个话题:http://www.regular-expressions.info/floatingpoint.html
答案 2 :(得分:6)
嗯,你也可以加0: - )
你不应该太在意Perl中标量的内部表示,除非你做了一些奇怪的事情(如果你是的话请告诉我们)。无论数字是什么,都是一个数字。
或者你需要检查字符串是否是“真实”号码?嗯,实际上,任何字符串都是。有个
好文章Is it a Number
关于这个话题。该链接指向 Wayback Machine ,因为原件已从perl.com
中删除。
答案 3 :(得分:3)
0+
更加惯用。它通常用于区分dualvars的组件。
$ perl -E'
system({ "nonexistant" } "nonexistant");
say 0+$!, ": ", $!;
'
2: No such file or directory
它看起来很奇怪,因为它不是你通常要做的事情。数字是一个数字,无论它是内部存储为PV,IV,UV还是NV。强制将其存储为NV(浮动)不是必需的,它通常表示其他地方的错误设计。