Perl printf проблема - PullRequest
       3

Perl printf проблема

1 голос
/ 08 февраля 2012

Как мне распечатать этот пример вывода, используя printf?

******************************************************************************
**  XYZ Corporation                   Date: March 27, 1989(Use current date)**
**  999 John Doe street                                                     **
**  Ypsilanti, MI. 48197.                                                   **
**                                                                          **
**  Pay to the order of:  ?                                                 **
**             The amount of: ?     dollars, and    ?    cents              **
**                                                                          **
**                                 signed:                                  **
**                                         President, XYZ Corporation.      **
**                                                                          **
**--------------------------------------------------------------------------**
**                          SUMMARY                                         **
**  Social security number:   ?                                             **
**  Regular pay:              ?                                             **
**  Overtime pay:             ?                                             **
**  Gross pay:                ?                                             **
**  Federal tax:              ?                                             **
**  Social sec. deduction:    ?                                             **
**  City tax:                 ?                                             **
**  Union dues:               ?                                             **
**  Net pay:                  ?                                             **
**                                                                          **
******************************************************************************

Я попробовал свой путь, но я не уверен, прав ли я:

printf"
XYZ Corporation                   Date: 
999 John Doe street                                                     
Ypsilanti, MI. 48197                                                   

  Pay to the order of:  |                                                 
  The amount of: |     dollars, and    |    cents              

                                 signed:                                  
                                         President, XYZ Corporation.      

--------------------------------------------------------------------------
                          SUMMARY                                         
  Social security number:   $ssn                                           
  Regular pay:              %-.2f
  Overtime pay:             %-.2f
  Gross pay:                %-.2f
  Federal tax:              %-.2f
  Social sec. deduction:    %-.2f
  City tax:                 %-.2f
  Union dues:               %-.2f
  Net pay:                  %-.2f\n", $regPay, $overPay, $grossPay, $fedTax, $ssnDeduction, $cityTax, $unionDues, $netPay;

Может ли кто-нибудь мне помочь?Я уверен, что неверно задал свое назначение, но я просто хочу узнать решение.

Ответы [ 2 ]

6 голосов
/ 08 февраля 2012

Я не думаю, что вы должны использовать printf здесь.Это похоже на идеальное приложение для возможностей Perl format.Они были в языке с момента его создания и именно поэтому Perl предположительно является аббревиатурой от «Практического извлечения и отчетности».Я никогда не использовал форматы, но вы можете узнать больше в этом уроке: http://www.webreference.com/programming/perl/format/index.html

Насколько мне известно, эта функция изменилась очень мало за последние двадесятилетия, поэтому практически все, что вы найдете в Интернете, может оказать вам полезную помощь.

1 голос
/ 08 февраля 2012
  • Вы не указали значения для большинства полей.
  • Вы убрали коробку звезд.
  • Вы интерполировали значения в шаблон.
  • Вы добавили пустую строку в верхней части формы.

Решение:

use POSIX qw( strftime );

my $date = strftime("%B %d, %Y", localtime);

# Doing it this way prevents floating point rounding errors.
my $net_pay_x100    = sprintf("%.0f", $net_pay * 100);
my $net_pay_cents   = $net_pay_x100 % 100;
my $net_pay_dollars = ( $net_pay_x100 - $net_pay_cents ) / 100;

printf(<<'__EOI__',
******************************************************************************
**  XYZ Corporation                   Date: %-31s **
**  999 John Doe street                                                     **
**  Ypsilanti, MI. 48197.                                                   **
**                                                                          **
**  Pay to the order of: %-50s **
**             The amount of: %5d dollars, and %02d cents                   **
**                                                                          **
**                                 signed:                                  **
**                                         President, XYZ Corporation.      **
**                                                                          **
**--------------------------------------------------------------------------**
**                          SUMMARY                                         **
**  Social security number: %11s                                     **
**  Regular pay:            %7.2f                                         **
**  Overtime pay:           %7.2f                                         **
**  Gross pay:              %7.2f                                         **
**  Federal tax:            %7.2f                                         **
**  Social sec. deduction:  %7.2f                                         **
**  City tax:               %7.2f                                         **
**  Union dues:             %7.2f                                         **
**  Net pay:                %7.2f                                         **
**                                                                          **
******************************************************************************
__EOI__
   $date,
   $name,
   $net_pay_dollars,
   $net_pay_cents,
   $ssn,
   $reg_pay,
   $over_pay,
   $gross_pay,
   $fed_tax,
   $ssn_deduction,
   $city_tax,
   $union_dues,
   $net_pay,
);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...