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

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

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

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

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

Ответы [ 6 ]

44 голосов
/ 19 августа 2009

И еще один способ подшутить над этим; -)

my $num_3dec = sprintf '%.3f', $num / 1000;
14 голосов
/ 19 августа 2009

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

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

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

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

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

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

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

10 голосов
/ 19 августа 2009
$num =~ s/(\d{3})$/.$1/

Это говорит: возьмите блок из 3 цифр (который должен быть закреплен в конце строки) и замените их на «.», за которым следует то, что только что было найдено.

2 голосов
/ 03 января 2014

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

$ num / = 1000.000;

/ PF

2 голосов
/ 19 августа 2009

Кто-нибудь в гольф?

substr $num,-3,0,'.';
1 голос
/ 12 марта 2014

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

$num = reverse $num;
$num =~ s/\d{3}(?=\d)/$&./g;
$num = reverse $num;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...