Ответ 1
$num =~ s/(\d{3})$/.$1/
Это говорит: возьмите блок из 3-х цифр (которые должны быть привязаны к END строки) и замените их на ".
", а затем все, что было просто согласовано.
У меня есть число и вам нужно добавить десятичное число для форматирования.
Гарантируется, что число будет между 1000 и 999999 (я рассмотрел другие возможности другими способами, это тот, на который я не могу оторваться). Мне нужно поставить десятичную цифру до трех последних цифр, например:
1000 -> 1.000
23513 -> 23.513
999999 -> 999.999
Как я могу это сделать?
$num =~ s/(\d{3})$/.$1/
Это говорит: возьмите блок из 3-х цифр (которые должны быть привязаны к END строки) и замените их на ".
", а затем все, что было просто согласовано.
И еще один способ для удовольствия: -)
my $num_3dec = sprintf '%.3f', $num / 1000;
Вот еще одно решение для удовольствия:
В Perl substr() может быть lvalue, которое может помочь в вашем случае.
substr ($num , -3 , 0) = '.';
добавит точку до трех последних цифр.
Вы также можете использовать четыре аргумента версии substr (как указано в комментариях), чтобы получить тот же эффект:
substr( $num, -3, 0, '.' );
Я бы надеялся, что это будет более элегантно/читаемо, чем решение regexp, но я уверен, что он сбросит всех, кто не используется для использования substr() как lvalue.
Гольф любой?
substr $num,-3,0,'.';
Я что-то упустил? Если у вас есть номер между 999999 и 1000, который должен представлять число от 999,999 до 1.000, вы должны иметь возможность:
$num/= 1000.000;
/PF
Как насчет этого?
$num = reverse $num;
$num =~ s/\d{3}(?=\d)/$&./g;
$num = reverse $num;