Как управлять форматированием с плавающей точкой в ​​Perl, используя sprintf? - PullRequest
1 голос
/ 19 декабря 2010

Я обычно использую %g, но, похоже, количество цифр экспоненты зависит от системы , и я не могу работать с такими вариантами, как %.4g или %.2g (они просто производят те же результаты, не так ли?).

Что я на самом деле хотел бы сделать, так это использовать простое представление с плавающей точкой «когда это возможно», если число (в абсолютном значении) находится в некотором диапазоне (например, 10 ^ 5> | x |> 10 ^ -5), в противном случае используйте научную запись. Я также хочу ограничить количество отображаемых цифр, скажем, до 5 (чтобы я не получал супер огромные числа с плавающей запятой, такие как 0.12345678901234567890 ...).

Некоторые примеры:

0.123456890 -> 0.12346

0.000000000123456 -> 1.23456e-10

Могу ли я сделать это прямо в sprintf или мне нужно написать специальную оболочку?

1 Ответ

4 голосов
/ 19 декабря 2010

Нет, вам нужно написать специальную оболочку, чтобы получить описанное вами поведение: perlfunc говорит:

Для "g" и "G" [точность] указывает максимальное количество отображаемых цифр, в том числе до десятичной точка и те, кто после нее;

Обратите внимание, что ведущие нули в простом представлении с плавающей запятой не считаются "цифрами".

В CPAN есть несколько модулей, которые помогут вам написать sprintf-подобную функцию. String :: Sprintf предназначен для добавления одного или двух пользовательских форматов к обычным sprintf форматам. String :: Formatter для запуска с нуля с функцией, которая выглядит как sprintf, но не наследует от нее никаких форматов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...