At 02:09 25-09-99 -0500, you wrote:
>Halo,
>
>[~]$ perl -e '$a = 0; printf("%f\n",$a * -1)'
>-0.000000
>[~]$ perl -e '$a = 0; printf("% #-7.3f\n",$a * -1)'
>-0.000 
>[~]$ perl -e '$a = 0; print $a * -1, "\n"'
>-0
>[~]$ perl -e 'printf("% #-7.3f\n",0 * -1)'
> 0.000 
>
>Kok kalo suatu variable yg nilainya nol dikalikan dengan bilangan
>negatif hasilnya jadi minus nol yah? Kenapa sih? dan gimana biar
>nampilinnya nol aja nggak pake minus sign?

untuk memformat bilangan real, perl masih menggunakan printf(3) dan
sprintf(3). jadi kelakuannya bergantung pada kelakuan library C
tsb. saya coba di Win kelakuannya berbeda (note: %% = %):

c:\4>perl -e "$a = 0; printf(qq[%%f\n],$a * -1)"
0.000000

c:\4>perl -e "$a = 0; printf(qq[%% #-7.3f\n],$a * -1)"
 0.000

c:\4>perl -e "$a = 0; print $a * -1, qq[\n]"
0

c:\4>perl -e "printf(qq[%% #-7.3f\n],0 * -1)"
 0.000

bilangan real memang disimpan dengan 1 bit sign. termasuk 0.
jadi memang ada +0 dan -0. kalo emang pengen nampilin 0 selalu 
sebagai 0 dan tidak pernah -0, anda bisa assign lagi 0 ke
variabel yang diinginkan. misalnya:

>>>>>
#!/usr/bin/perl

sub my_sprintf {
        my $fmt=shift;
        my @copy=@_;
        for (@copy) { $_ = 0 if $_ == 0 }
        sprintf($fmt,@copy);
}

sub my_printf {
        print my_sprintf(@_);
}

$a=0;
my_printf "%f\n",$a * -1;
my_printf "% #-7.3f\n",$a * -1;
#print $a * -1, "\n";
my_printf "% #-7.3f\n",0 * -1;
<<<<<

sayang fungsi built-in printf dan sprintf tidak bisa di-override. 
kalo bisa asik tuh...

--
Steven Haryanto <[EMAIL PROTECTED]>


--------------------------------------------------------------------------------
Utk berhenti langganan, kirim email ke [EMAIL PROTECTED]
Informasi arsip di http://www.linux.or.id/milis.php3
Pengelola dapat dihubungi lewat [EMAIL PROTECTED]

Kirim email ke