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

时间:2012-05-14 12:18:03

标签: perl

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

示例:

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

还有另一种标准方法可以从'10 .0500000'获得10.05而不是乘以一个吗?

4 个答案:

答案 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(浮动)不是必需的,它通常表示其他地方的错误设计。