gpt4 book ai didi

perl - 有没有对数字(千)进行分组的功能?

转载 作者:行者123 更新时间:2023-12-01 09:04:51 25 4
gpt4 key购买 nike

在(小)模块中是否隐藏了一个函数,它为我执行此操作:

my $var = 23654325432;
$var = reverse $var;
$var =~ s/\d{3}\K(?=\d+)/_/g;
$var = reverse $var;

我喜欢 Number::Format但它没有通过 Windows 上的所有测试。

use Number::Format;
my $nf = new Number::Format(
-thousands_sep => ',',
-decimal_point => '.',
);

my $formatted = $nf->format_number( 23142153 );

最佳答案

最快的方法是在perlfaq ( perldoc -q 逗号 ):

sub commify {
local $_ = shift;
1 while s/^([-+]?\d+)(\d{3})/$1,$2/;
return $_;
}

当然,我只是想出了一个比这个高约 70% 的函数。

use constant THOU_SEP => ',';
use English qw<@LAST_MATCH_START @LAST_MATCH_END>;
sub ss_commify {
my $s = shift;
return $s unless $s =~ m/\d{4,}/;
my ( $f, $p ) = ( $LAST_MATCH_START[0], $LAST_MATCH_END[0] );
my $ts = THOU_SEP;
# |-- That is, replace a *0-length* substring at $p with the
# v thousand separator
substr( $s, $p, 0, $ts ) while ( $p -= 3 ) > $f;
return $s;
}

它适用于您前面或后面的任何文本。 FAQ 版本只适用于后面的文本(诚然,在 Perl 中是一个 numeric 值)。

这个想法是用正则表达式 once 找到你想要处理的内容,然后简单地使用 Perl 的弹性字符串实现来做敷衍的工作。对这些中的每一个进行替换似乎比必要的开销要多一些。

关于perl - 有没有对数字(千)进行分组的功能?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9634738/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com