рассмотреть возможность набора чисел:
my @array = (
1.788139343e-007, 0.0547055073198, -0.703213036125,
-0.583665880391, -1.41198285298, +0.171879081676,
-0.58966025098, -86.0627173425, -0.84449797709,
3.49876623321e-005, 3.02660429162, -0.256948695361);
Я хотел бы выровнять десятичную точку по n-му столбцу общей ширины m (возможно, n = 6 и m = 25)
Если использовать %f
, я получаю хорошо выровненные числа, но числа, которые требуют научной записи, уничтожаются.usging %g
интерпретирует аргумент точности после точки как абсолютную точность, которая приводит к различным десятичным знакам после десятичной точки.И поскольку большинство чисел находится в диапазоне (-10, 10), я не хочу использовать научную запись %e
Есть ли какие-либо флаги или атрибуты формата (или их комбинации), которые я пропустил?
ожидаемый результат будет:
foreach my $f (@array){
printf("[%+25.12g]$/", $f);
}
[ +1.788139343e-007 ]
[ +0.0547055073198 ]
[ -0.703213036125 ]
[ -0.583665880391 ]
[ -1.41198285298 ]
[ +0.0171879081676 ]
[ -0.58966025098 ]
[ -86.0627173425 ]
[ -0.84449797709 ]
[ +3.49876623321e-005 ]
[ +3.02660429162 ]
[ -0.256948695361 ]
или даже лучше
[ +1.7881393430000e-007 ]
[ +0.0547055073198 ]
[ -0.7032130361250 ]
[ -0.5836658803910 ]
[ -1.4119828529800 ]
[ +0.0171879081676 ]
[ -0.5896602509800 ]
[ -86.0627173425000 ]
[ -0.8444979770900 ]
[ +3.4987662332100e-005 ]
[ +3.0266042916200 ]
[ -0.2569486953610 ]
(вопрос о Perl, но строка формата s?printf
довольно независима,поэтому я также добавил C
тег)