当前位置:  开发笔记 > 编程语言 > 正文

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

如何解决《如何将字符串转换为Perl中的数字?》经验,为你挑选了6个好方法。

如何将包含数字的字符串转换为Perl中的数字值?



1> Alnitak..:

您根本不需要转换它:

% perl -e 'print "5.45" + 0.1;'
5.55


5.55不是整数
@OrangeDog OP编辑了这个问题(这个答案发布几个月后) - 原来的问题实际上有浮点数.

2> porquero..:

这是一个简单的解决方案:

例1

my $var1 = "123abc";
print $var1 + 0;

结果

123

例2

my $var2 = "abc123";
print $var2 + 0;

结果

0


AFAIU这是对问题的唯一答案
将零添加到字符串时要当心。如果字符串以“ inf”或“ nan”开头,则该值将不会为零。例如,我的$ var2 =“ info123”; 打印$ var2 + 0:结果将是:Inf

3> brian d foy..:

Perl是一种基于上下文的语言.根据您提供的数据,它无法正常工作.相反,它会根据您使用的运算符以及使用它们的上下文来确定如何处理数据.如果你做数字的事情,你会得到数字:

# numeric addition with strings:
my $sum = '5.45' + '0.01'; # 5.46

如果你做各种各样的字符串,你会得到字符串:

# string replication with numbers:
my $string = ( 45/2 ) x 4; # "22.522.522.522.5"

Perl主要指出要做什么,这是最正确的.另一种说法相同的方式是Perl更关心动词而不是名词.

你想做点什么而且不行吗?


我不是数字倍增.`x`是字符串复制操作符.
不应该是`我的$ string =(45/2)x 3; #"22.522.522.5"`45而不是44?否则我没有得到'.5来自结果的地方......

4> 小智..:

谷歌引导我在这里搜索同样的问题phill问(排序浮动)所以我认为尽管线程有点旧,但是值得发布答案.我是perl的新手,我仍然把头缠在它上面但是brian d foy的声明"Perl更关心的是动词而不是名词." 以上真的击中了头上的钉子.在应用排序之前,您不需要将字符串转换为浮点数.您需要告诉排序将值排序为数字而不是字符串.即

my @foo = ('1.2', '3.4', '2.1', '4.6');
my @foo_sort = sort {$a <=> $b} @foo;

有关排序的更多详细信息,请参见http://perldoc.perl.org/functions/sort.html



5> 小智..:

据我所知,int()并不是用于指定数据类型的"强制转换"函数,它只是(ab)用于将上下文定义为算术类型.我(ab)过去使用过(0 + $ val)来确保$ val被视为一个数字.



6> indexless..:
$var += 0

可能是你想要的.但是请注意,如果$ var是字符串无法转换为数字,则会收到错误,$ var 将重置为0:

my $var = 'abc123';
print "var = $var\n";
$var += 0;
print "var = $var\n";

日志

var = abc123
Argument "abc123" isn't numeric in addition (+) at test.pl line 7.
var = 0

推荐阅读
ifx0448363
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有