Как я могу вставить десятичную точку перед тремя последними цифрами числа?

У меня есть число и вам нужно добавить десятичное число для форматирования.

Гарантируется, что число будет между 1000 и 999999 (я рассмотрел другие возможности другими способами, это тот, на который я не могу оторваться). Мне нужно поставить десятичную цифру до трех последних цифр, например:

1000   -> 1.000
23513  -> 23.513
999999 -> 999.999

Как я могу это сделать?

Ответ 1

$num =~ s/(\d{3})$/.$1/

Это говорит: возьмите блок из 3-х цифр (которые должны быть привязаны к END строки) и замените их на ".", а затем все, что было просто согласовано.

Ответ 2

И еще один способ для удовольствия: -)

my $num_3dec = sprintf '%.3f', $num / 1000;

Ответ 3

Вот еще одно решение для удовольствия:

В Perl substr() может быть lvalue, которое может помочь в вашем случае.

substr ($num , -3 , 0) = '.';

добавит точку до трех последних цифр.

Вы также можете использовать четыре аргумента версии substr (как указано в комментариях), чтобы получить тот же эффект:

substr( $num, -3, 0, '.' );

Я бы надеялся, что это будет более элегантно/читаемо, чем решение regexp, но я уверен, что он сбросит всех, кто не используется для использования substr() как lvalue.

Ответ 4

Гольф любой?

substr $num,-3,0,'.';

Ответ 5

Я что-то упустил? Если у вас есть номер между 999999 и 1000, который должен представлять число от 999,999 до 1.000, вы должны иметь возможность:

$num/= 1000.000;

/PF

Ответ 6

Как насчет этого?

$num = reverse $num;
$num =~ s/\d{3}(?=\d)/$&./g;
$num = reverse $num;