在perl中将数字视为数字的最简单方法?

发布于 2024-12-16 11:46:59 字数 336 浏览 1 评论 0原文

我有一个条件:

next if ( ! ($x or $y or $z) );

检查的逻辑是至少有一个必须在数值上非零才能继续循环。

我相信它们实际上是数字。

问题是 Perl 在内部将浮点数存储为字符串。所以检查! $x 其中 $x='0.00' 实际上并不计算为 true: my $x = 0.00; if ( ! $x ) { never_gets_here(); }

强制对变量进行数值计算而不使该行过于冗长的最简单方法是什么?

I have a condition:

next if ( ! ($x or $y or $z) );

The logic of the check is that at least one must be numerically non-zero to continue in the loop.

I trust that they actually are numbers.

The problem is that perl stores floats as strings internally. So a check on ! $x where $x='0.00' does not actually evaluate to true: my $x = 0.00; if ( ! $x ) { never_gets_here(); }

What is the easiest way to force numeric evaluation of a variable without making the line too verbose?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

ゃ人海孤独症 2024-12-23 11:46:59

我不确定你从哪里得到 Perl 将浮点数存储为字符串的想法。浮点数和字符串是不同的东西:

perl -le 'print 1 if 0.00'
perl -le 'print 2 if "0.00"'
2

如果你想在未知标量上强制数字上下文,你可以只向它添加零,例如

unless ( $x + 0 ) { ... }

I'm not sure where you get the idea that Perl stores floats as strings. Floats and strings are different things:

perl -le 'print 1 if 0.00'
perl -le 'print 2 if "0.00"'
2

If you want to force numeric context on an unknown scalar, you can just add zero to it, e.g.

unless ( $x + 0 ) { ... }
楠木可依 2024-12-23 11:46:59

如果你想检查一个数字是否非零,可以使用一个运算符:

next if (! ($x != 0 or $y != 0 or $z != 0) )

    $x       bool $x      $x != 0
 --------   --------    ----------------------------
    0        false       false
  '0.00'     true        false
  '0E0'      true        false
  'string'   true        false, generates 'non-numeric' warning
    ''       false       false, generates 'non-numeric' warning
   undef     false       false, generates 'non-numeric' warning

If you want to check whether a number is numerically non-zero, there is an operator for that:

next if (! ($x != 0 or $y != 0 or $z != 0) )

    $x       bool $x      $x != 0
 --------   --------    ----------------------------
    0        false       false
  '0.00'     true        false
  '0E0'      true        false
  'string'   true        false, generates 'non-numeric' warning
    ''       false       false, generates 'non-numeric' warning
   undef     false       false, generates 'non-numeric' warning
烏雲後面有陽光 2024-12-23 11:46:59

要检查数字是否具有非零值,您只需添加 0:

$ perl -e "print '0.02' + 0;"
0.02

$ perl -e "print '0.00' + 0;"
0

这在 Perl 中是假值:

$ perl -e "print (('0.00' + 0) ? 'true' : 'false');"
false

To check if number has non-zero value you can just add 0:

$ perl -e "print '0.02' + 0;"
0.02

and

$ perl -e "print '0.00' + 0;"
0

which is falsy value in Perl:

$ perl -e "print (('0.00' + 0) ? 'true' : 'false');"
false
春夜浅 2024-12-23 11:46:59

将零 (0) 添加到变量(就像在“awk”中一样)。

Add zero (0) to the variable (just as you would in 'awk').

焚却相思 2024-12-23 11:46:59

如果没有(或仅有)负值,您可以使用以下快捷方式,恕我直言,这比向每个单个值添加零更干净:

next if ( $x + $y + $z == 0 );

You could use following shortcut if there are no ( or exclusively ) negative values, which is imho cleaner than adding zero to each single value:

next if ( $x + $y + $z == 0 );
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文